2016-05-21 41 views
1

我曾经使用RabbitMQ作为消息传递平台,我从来没有遇到过任何问题 - 不幸的是,最近我们将基础架构迁移到了Azure,提供RabbitMQ服务器,所以我想过尝试Service Bus扩展。C#服务总线多个侦听器都收到相同的消息(BrokeredMessage)

我有一个作家和多个读者。目前,读者将分别读取不同的消息(消息竞争模式 - 例如对负载平衡有益)。

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

读者(S):

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

回答

3

天青服务总线支持多个范例,其中一个被称为“主题”:

How to use Service Bus topics and subscriptions

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

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

+0

看来我的代码工作,如果我为每个侦听器使用1订阅。它是否正确?所以如果我有100,000个用户,我会有100,000个订阅? – TheWalkingPanda

+0

@TheWalkingPanda你认为一个读者是由你决定的。如果您正在寻找一种广播方式,还有其他技术可以帮助您。其中之一是SignalR。你是否熟悉它的工作原理?您理论上可以将消息从队列或主题中拉出来,并使用SignalR将该消息广播到所有或特定的连接用户组。如果您的用户是移动用户,则可以使用Azure通知中心和自定义代码。 –

+0

我在阅读有关SignalR的同时寻找解决方案。我的设置不需要很多连接的消费者,我只是想知道是否有多个订阅是主题应该工作的方式或者我做错了什么。没关系主题对我来说很好;) – TheWalkingPanda