sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo configurar Rebus para tener temas basados ​​en el tipo de controladores

Hay algunas cosas que parecen confusas con su pregunta.

Pero supongo que su pregunta fundamental es cómo asegurarse de que cada suscriptor procese cada mensaje una sola vez.

La respuesta es bastante sencilla:tenga un punto final separado para cada suscriptor; esto significa que cada suscriptor tendrá su propia cola de entrada desde la cual se procesarán los mensajes y a la que se devolverá un mensaje fallido.

A continuación, puede tener tantos o tan pocos controladores en cada suscriptor como desee. Todos los controladores compatibles se ejecutarán para cada mensaje entrante.

Con Rebus, cada invocación a Configure.With(...).(...).Start() le dará un punto final separado, por lo que en su caso, le sugiero que ajuste la creación del punto final del suscriptor en un método, que luego puede invocar así:

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

// ...

donde CreateSubscriber entonces sería algo como esto:

public IBus CreateSubscriber(string queueName)
{
    return Configure.With(GetContainerAdapter())
        .Transport(t => t.UseMsmq(queueName))
        .Start();        
}