C#服务总线多个侦听器都接收相同的消息(BrokeredMessage)
我曾经使用RabbitMQ作为消息传递平台,但我从来没有遇到过任何问题-不幸的是,我们最近将基础设施移到了Azure,而他们不提供RabbitMQ服务器,因此我考虑尝试服务总线扩展 我有一个作者和多个读者。目前,读者将各自阅读不同的消息(消息竞争模式-例如,有利于负载平衡) 我想要的是,所有的读者都得到相同的信息,并自己处理 读者: 我已经找了两个小时的解决方案,但什么也找不到。在RabbitMQ中,这将是默认行为C#服务总线多个侦听器都接收相同的消息(BrokeredMessage),c#,azure,brokeredmessage,C#,Azure,Brokeredmessage,我曾经使用RabbitMQ作为消息传递平台,但我从来没有遇到过任何问题-不幸的是,我们最近将基础设施移到了Azure,而他们不提供RabbitMQ服务器,因此我考虑尝试服务总线扩展 我有一个作者和多个读者。目前,读者将各自阅读不同的消息(消息竞争模式-例如,有利于负载平衡) 我想要的是,所有的读者都得到相同的信息,并自己处理 读者: 我已经找了两个小时的解决方案,但什么也找不到。在RabbitMQ中,这将是默认行为 Azure服务总线支持多种范例,其中一种称为“主题”: 与服务总线队列不同,在
Azure服务总线支持多种范例,其中一种称为“主题”: 与服务总线队列不同,在服务总线队列中,每条消息由单个使用者处理,主题和订阅使用发布/订阅模式提供“一对多”的通信形式
上面的链接演示了核心主题概念以及代码示例。如果我为每个侦听器使用一个订阅,我的代码似乎可以工作。这是正确的吗?所以,如果我有100000个用户,我将有100000个订阅?@ Walk熊猫。你认为读者是由你决定的。如果你正在寻找一种广播方式,还有其他技术可以帮助你。其中一个是信号员。你熟悉它的工作原理吗?从理论上讲,您可以将消息从队列或主题中拉出,并使用信号器将该消息广播给所有或特定的连接用户组。如果您的用户是移动用户,那么您也可以使用Azure通知中心和自定义标记。我的设置不需要很多连接的使用者,我只是想知道是否有多个订阅是主题应该工作的方式,或者我是否做错了什么。无所谓的话题对我来说很好;)@在事件驱动体系结构中,应用程序希望以多种不同的方式处理同一事件。您如何通过主题和订阅者实现这一点?是否提前手动创建所有订阅服务器?
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);