azure - 同一消息的多个订阅者 Rebus Azure 服务总线

标签 azure service subscription rebus bus

我有两个完全相同的消费者

消费者1

using (var adapter = new BuiltinHandlerActivator())
        {
            adapter.Handle<string>(async (bus, message) =>
            {
                Console.WriteLine("Got message > " + message);

                await bus.Reply("Received in consumer 1");
            });

            Configure.With(adapter)
                .Transport(t => t.UseAzureServiceBus(connectionString, "server"))
                .Start();

            adapter.Bus.Subscribe<string>().Wait();

            Console.WriteLine("Press ENTER to quit");
            Console.ReadLine();
        }

消费者2

using (var adapter = new BuiltinHandlerActivator())
        {
            adapter.Handle<string>(async (bus, message) =>
            {
                Console.WriteLine("Got message > " + message);

                await bus.Reply("Received in Consumer 2");
            });

            Configure.With(adapter)
                .Transport(t => t.UseAzureServiceBus(connectionString, "server"))
                .Start();

            adapter.Bus.Subscribe<string>().Wait();

            Console.WriteLine("Press ENTER to quit");
            Console.ReadLine();
        }

制作人

using (var adapter = new BuiltinHandlerActivator())
        {
            adapter.Handle<string>(async message =>
            {
                Console.WriteLine("Returned > " + message);
            });

            var bus = Configure
                .With(adapter)
                .Transport(t => t.UseAzureServiceBus(connectionString, "client"))
                .Routing(r => r.TypeBased().Map<string>("server"))
                .Start();

            Console.WriteLine("Press Q to quit or any other key to produce a job");
            while (true)
            {
                Console.Write("Write something > ");
                var text = Console.ReadLine();

                if (string.IsNullOrWhiteSpace(text)) break;

                bus.Publish(text).Wait();
            }
        }

我期望的是,每当我从生产者发送消息时,我的消费者都会显示该消息。 现在它只在其中之一中执行此操作。当我关闭该消息并发送另一条消息时,剩下的消息会收到它。

最佳答案

基本上,您只需为消费者提供不同的名称即可。 Rebus为每个生产者创建一个主题(基于程序集、命名空间、类型),并为这些主题中的每个消费者创建订阅。 如果两个消费者使用相同的名称,他们就会竞争消息。

                .Transport(t => t.UseAzureServiceBus(connectionString, "consumer1"))
                .Transport(t => t.UseAzureServiceBus(connectionString, "consumer2"))

完整示例:https://github.com/rebus-org/RebusSamples/tree/master/PubSubNative

其他一些有用的链接:

关于azure - 同一消息的多个订阅者 Rebus Azure 服务总线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60855148/

相关文章:

WCF - 在单个 APP.Config 文件中定义多个服务?

python - pywin32 TOKEN_PRIVILEGES

laravel - 取消 Stripe 订阅会引发调度错误

javascript - 查询Azure时间序列数据(TSI)数据

azure - 查找未使用的存储帐户 azure ARM

android - 一段时间后 Android 服务中未接收到 TCP 套接字

open-source - 哪种开源电子商务解决方案适用于订阅?

html - 创建用户可以订阅的动态 ICS 文件

.net - 将 DLL 移动到 Azure 云服务部署包

Azure Active Directory - 允许的 token 受众