Ve vaší otázce se zdají matoucí některé věci.
Ale myslím, že vaší základní otázkou je, jak si být jisti, že každou zprávu zpracuje každý předplatitel pouze jednou.
Odpověď je docela snadná:Mít samostatný koncový bod pro každého odběratele – to znamená, že každý odběratel bude mít svou vlastní vstupní frontu, ze které budou zprávy zpracovávány a do které se vrátí neúspěšná zpráva.
V každém odběrateli pak můžete mít tolik nebo jen málo obslužných prvků, kolik chcete. Pro každou příchozí zprávu budou provedeny všechny kompatibilní handlery.
S Rebusem každé vyvolání Configure.With(...).(...).Start()
vám poskytne samostatný koncový bod - takže ve vašem případě doporučuji zabalit vytvoření koncového bodu odběratele do metody, kterou pak můžete vyvolat takto:
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();
// ...
kde CreateSubscriber
by pak bylo něco takového:
public IBus CreateSubscriber(string queueName)
{
return Configure.With(GetContainerAdapter())
.Transport(t => t.UseMsmq(queueName))
.Start();
}