2016-04-19 6 views
1

Ich habe System mit einem Verlag mehrere Abonnenten. Einige Nachrichten sollten jedoch nur von einem einzelnen Teilnehmer verarbeitet werden. In meinem Fall sendet der Herausgeber eine Nachricht über die Änderung der Daten in der Datenbank, alle Abonnenten haben Zugriff auf die gleiche Datenbank, aber ich brauche sie nicht alle die gleichen Daten ändern. Wie kann dies mit Rebus erreicht werden?Rebus Abonnenten-Publisher-System. Prozessmeldung nur von einzelnen Teilnehmer

PS. Vergaß zu erwähnen. Ich kann die Nachricht nicht nur mit einem Abonnenten abonnieren, da die Abonnenten jederzeit online/offline gehen können.

Antwort

0

Aber einige Meldungen sollten nur von einzelnen Teilnehmer

Dann verarbeitet werden Sie nicht bus.Publish für diese bestimmte Nachrichtentyp verwendet werden soll - es ist ein Mechanismus, der Nachrichten an einen bestimmten Empfänger sendet die Sie verwenden sollten - Sie tun es durch

  1. Zuordnung einer Nachricht t yp an einen Endpunkt
  2. „Senden“, um die Nachricht statt „publishing“ es

Sie tun (1) wie folgt aus:

Configure.With(...) 
    .(...) 
    .Routing(r => { 
     r.TypeBased() 
      .Map<YourMessage>("the_recipient"); 
    }) 
    .Start(); 

so Rebus zu sagen, dass, wer bekommt seine Nachrichten aus der Warteschlange the_recipient ist der Besitzer von Nachrichten des Typs YourMessage und sollte als der natürliche Empfänger für eine implizit weitergeleitet Nachricht dieses Typs betrachtet werden.

Sie tun (2) wie folgt aus:

await bus.Send(new YourMessage(...)); 

und dann Rebus wird die Nachricht an die Botschaft des natürlichen Eigentümer senden.

Ich hoffe, dass der Trick für Sie :)

+0

Do '' 'the_recipient''' Warteschlangennamen von jedem„Teilnehmer“verwendet werden kann? – zabulus

+0

Ich gehe davon aus, dass Ihre Abonnenten unterschiedlich sind und Sie möchten, dass jeder Abonnent eine Kopie der veröffentlichten Nachrichten erhält. Dies bedeutet, dass jeder Teilnehmer seine eigene Eingabewarteschlange haben muss. – mookid8000

Verwandte Themen