Há algumas coisas que parecem confusas com sua pergunta.
Mas acho que sua pergunta fundamental é como ter certeza de que cada mensagem é processada uma vez apenas por cada assinante.
A resposta é muito fácil:tenha um endpoint separado para cada assinante - isso significa que cada assinante terá sua própria fila de entrada da qual as mensagens são processadas e para a qual uma mensagem com falha será retornada.
Você pode então ter quantos manipuladores quiser em cada assinante. Todos os manipuladores compatíveis serão executados para cada mensagem recebida.
Com o Rebus, cada invocação para
Configure.With(...).(...).Start()
fornecerá um endpoint separado - então, no seu caso, sugiro que você envolva a criação do endpoint do assinante em um método, que você pode invocar assim: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();
// ...
onde
CreateSubscriber
então seria algo assim:public IBus CreateSubscriber(string queueName)
{
return Configure.With(GetContainerAdapter())
.Transport(t => t.UseMsmq(queueName))
.Start();
}