2016-05-21 4 views
1

私はメッセージングプラットフォームとしてRabbitMQを使用していましたが、問題は一度もありませんでした。残念ながら、最近インフラをAzureに移行し、 RabbitMQサーバを提供しているので、私はService Bus拡張を試してみることを考えました。C#サービスバス複数のリスナーはすべて同じメッセージを受信します(BrokeredMessage)

私は1人のライターと複数のリーダーを持っています。現在、読者はそれぞれ異なるメッセージ(メッセージ競合パターン - たとえば負荷分散に適しています)を読んでいます。

私が欲しいのは、すべての読者が同じメッセージを取得し、それを処理するということです。

リーダー(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); 

私は2時間のソリューションを探してきたし、何かを見つけることができませんでした。 RabbitMQでは、これがデフォルトの動作になります。

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

答えて

3

Azureのサービスバスのいずれが「項目」と呼ばれ、複数のパラダイムをサポートしています。各メッセージは単一によって処理されたサービスバスキューとは対照的に

How to use Service Bus topics and subscriptions

消費者、トピックおよびサブスクリプションは、パブリッシュ/サブスクライブ・パターンを使用して、1対多の通信形式を提供します。

上記のリンクは、コアトピックの概念とコードサンプルを示しています。

+0

各リスナーに対して1つのサブスクリプションを使用すると、私のコードが動作するようです。これは正しいです?だから私は100,000人のユーザーがいる場合、私は10万のサブスクリプションを持っていますか? – TheWalkingPanda

+0

@ TheWalkingPandaあなたは読者があなた次第と考えていますか?あなたが放送をする方法を探しているなら、あなたを助けることができる他の技術があります。それらの1つはSignalRです。あなたはそれがどのように機能するかに精通していますか理論的にはキューやトピックからメッセージを取り出し、SignalRを使用してそのメッセージをすべてのまたは特定の接続されたユーザーグループにブロードキャストすることができます。ユーザーがモバイルユーザーの場合は、Azure Notification Hubとカスタムタグを使用することもできます。 –

+0

解決策を探している間、私はSignalRについて読んでいます。私のセットアップは、接続された多くの消費者を必要としません、私は複数のサブスクリプションを持っているかどうかは、トピックが動作するかどうか、 Nevermindトピックは私のためには大丈夫です;) – TheWalkingPanda

関連する問題