2016-04-19 2 views
1

У меня есть система с одним издателем нескольких подписчиков. Но некоторые сообщения должны обрабатываться только одним абонентом. В моем случае издатель отправляет сообщение об изменении данных в базе данных, все подписчики имеют доступ к одной и той же базе данных, но мне не нужны все эти одни и те же данные. Как это можно сделать с помощью ребуса?Система-издатель Rebus. Сообщение процесса только от одного абонента

PS. Забыл упомянуть. Я не могу подписаться на сообщение только с одним абонентом, потому что подписчики могут постоянно работать в сети/в автономном режиме.

ответ

0

Но некоторые сообщения должны быть обработаны только одним абонентом

Тогда вы не должны использовать bus.Publish для этого конкретного типа сообщения - есть механизм, который посылает сообщения один конкретного получателя, который вы должны использовать - вы делаете это по

  1. отображение сообщения t Ype к конечной точке
  2. «посылает» сообщение вместо «публикации» он

Вы делаете (1), как это:

Configure.With(...) 
    .(...) 
    .Routing(r => { 
     r.TypeBased() 
      .Map<YourMessage>("the_recipient"); 
    }) 
    .Start(); 

, таким образом, говорить Головоломки, что тот, кто получает свои сообщения из очереди the_recipient является владельцем сообщений типа YourMessage и должен считаться естественным получателем для неявного маршрутизируемого сообщения этого типа.

Вы делаете (2), как это:

await bus.Send(new YourMessage(...)); 

, а затем Ребус отправит сообщение натуральному владельца сообщения.

Я надеюсь, что делает трюк для вас :)

+0

Do '' 'the_recipient''' имя очереди может использоваться каждым«абонентом»? – zabulus

+0

Я предполагаю, что ваши подписчики разные, и вы хотите, чтобы каждый подписчик получал копию опубликованных сообщений. Это означает, что каждый абонент должен иметь свою собственную входную очередь. – mookid8000

Смежные вопросы