Der er et par ting, der virker forvirrende med dit spørgsmål.
Men jeg gætter på, at dit grundlæggende spørgsmål er, hvordan du kan være sikker på, at hver besked kun behandles én gang af hver abonnent.
Svaret er ret nemt:Hav et separat slutpunkt for hver abonnent - det betyder, at hver abonnent vil have sin egen inputkø, som meddelelser bliver behandlet fra, og som en mislykket meddelelse vil blive returneret til.
Du kan derefter have så mange eller så få behandlere i hver abonnent, som du vil. Alle kompatible behandlere vil blive udført for hver indkommende besked.
Med Rebus, hver påkaldelse til Configure.With(...).(...).Start()
vil give dig et separat slutpunkt - så i dit tilfælde foreslår jeg, at du pakker oprettelsen af abonnentslutpunktet ind i en metode, som du derefter kan påberåbe som denne:
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();
// ...
hvor CreateSubscriber
ville så være noget som dette:
public IBus CreateSubscriber(string queueName)
{
return Configure.With(GetContainerAdapter())
.Transport(t => t.UseMsmq(queueName))
.Start();
}