Er zijn een paar dingen die verwarrend lijken met uw vraag.
Maar ik denk dat uw fundamentele vraag is hoe u er zeker van kunt zijn dat elk bericht slechts één keer door elke abonnee wordt verwerkt.
Het antwoord is vrij eenvoudig:zorg voor een apart eindpunt voor elke abonnee - dit betekent dat elke abonnee zijn eigen invoerwachtrij heeft waaruit berichten worden verwerkt en waarnaar een mislukt bericht wordt teruggestuurd.
U kunt dan zo veel of zo weinig handlers in elke abonnee hebben als u wilt. Alle compatibele handlers worden uitgevoerd voor elk binnenkomend bericht.
Met Rebus, elke aanroep van Configure.With(...).(...).Start()
zal je een apart eindpunt geven - dus in jouw geval raad ik je aan om het aanmaken van het eindpunt van de abonnee in een methode in te pakken, die je dan als volgt kunt aanroepen:
var event1Subscriber = CreateSubscriber("subscriber_event1");
event1Subscriber.Subscribe<Event1>().Wait();
var event2Subscriber = CreateSubscriber("subscriber_event2");
event2Subscriber.Subscribe<Event2>().Wait();
var event3Subscriber = CreateSubscriber("subscriber_event3");
event3Subscriber.Subscribe<Event3>().Wait();
// ...
waar CreateSubscriber
zou dan ongeveer zo zijn:
public IBus CreateSubscriber(string queueName)
{
return Configure.With(GetContainerAdapter())
.Transport(t => t.UseMsmq(queueName))
.Start();
}