2016-05-21 42 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