C#Service Bus多个侦听器都收到相同的消息(BrokeredMessage)

时间:2016-05-21 19:34:19

标签: c# azure brokeredmessage

我曾经使用RabbitMQ作为消息传递平台,我从来没有遇到任何问题 - 遗憾的是,我们最近将我们的基础设施迁移到Azure,他们没有提供RabbitMQ服务器,所以我考虑尝试使用服务总线扩展

我有一位作家和多位读者。目前,读者将各自阅读不同的消息(消息竞争模式 - 例如,适用于负载平衡)。

我想要的是,所有读者都能获得相同的消息并自行处理。

读者:

string connectionKey = "....";
        this.client = QueueClient.CreateFromConnectionString(connectionKey, "dev");
        this.client.OnMessage((message) =>
        {
            try
            {
                Console.WriteLine("Message received: " + message.GetBody<string>());
                Console.WriteLine("Message ID: " + message.MessageId);
              //  message.Complete();
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception " + e.Message);
            }
        });

作者:

Console.WriteLine("Sending message " + message);
        BrokeredMessage msg = new BrokeredMessage(message);
        this.client.Send(msg);

我一直在寻找两个小时的解决方案,却找不到任何东西。在RabbitMQ中,这将是默认行为。

Image showing pattern of what I have vs. what I need

1 个答案:

答案 0 :(得分:4)

Azure Service Bus支持多种范例,其中一种称为“主题”:

How to use Service Bus topics and subscriptions

与服务总线队列相比,其中每个消息由单个消费者处理,主题和订阅使用发布/订阅模式提供“一对多”通信形式。

上面的链接演示了核心主题概念以及代码示例。