2016-05-21 4 views
1

Ich habe RabbitMQ als Messaging-Plattform verwendet und ich hatte nie Probleme damit - leider haben wir unsere Infrastruktur kürzlich auf Azure umgestellt und sie nicht ' Ich biete RabbitMQ-Server an, also dachte ich darüber nach, die Service-Bus-Erweiterung auszuprobieren.C# Service Bus mehrere Listener erhalten alle die gleiche Nachricht (BrokeredMessage)

Ich habe einen Schreiber und mehrere Leser. Gegenwärtig lesen die Leser jeweils eine andere Nachricht (Nachrichten konkurrierendes Muster - z. B. gut für den Lastausgleich).

Was ich will, ist, dass alle Leser die gleiche Nachricht bekommen und selbst verarbeiten.

Der Leser (e):

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); 
      } 
     }); 

Der Autor:

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

Ich habe zwei Stunden nach einer Lösung gesucht und nichts gefunden. In RabbitMQ wäre das das Standardverhalten.

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

Antwort

3

Azure Service Bus unterstützt mehrere Paradigmen, von denen ein "Topics" genannt:

How to use Service Bus topics and subscriptions

Im Gegensatz Service Bus-Warteschlangen, wobei jede Nachricht, die von einem einzigen verarbeitet wird Consumer, Topics und Subscriptions bieten eine "One-to-Many" -Form der Kommunikation mit einem Publish/Subscribe-Muster.

Link oben zeigt Kernthemen Konzepte sowie Code-Beispiele.

+0

Es scheint, dass mein Code funktioniert, wenn ich 1 Abonnement für jeden Listener verwende. Ist das richtig? Also, wenn ich 100.000 Benutzer habe, werde ich 100.000 Abonnements haben? – TheWalkingPanda

+0

@TheWalkingPanda Was ist deiner Meinung nach ein Leser? Es gibt andere Technologien, die Ihnen helfen können, wenn Sie nach einer Möglichkeit suchen, eine Sendung zu machen. Einer von ihnen ist SignalR. Kennen Sie die Funktionsweise? Sie könnten theoretisch Nachrichten aus der Warteschlange oder dem Thema herausziehen und SignalR verwenden, um diese Nachricht an alle oder eine bestimmte Gruppe von verbundenen Benutzern zu senden. Wenn Ihre Nutzer mobile Nutzer sind, können Sie auch den Azure Notification Hub und benutzerdefinierte Tags verwenden. –

+0

Ich habe über SignalR nach einer Lösung gesucht. Meine Einrichtung erfordert nicht viele verbundene Verbraucher, ich habe mich nur gefragt, ob mehrere Abonnements die Art sind, wie Themen funktionieren sollen oder ob ich etwas falsch gemacht habe. Nevermind Themen sind gut für mich;) – TheWalkingPanda

Verwandte Themen