MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como configurar o Rebus para ter tópicos baseados no tipo de manipulador


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();        
}