Односторонняя публикация в ребусе?

Читая раздел Передача работы в вики, кажется, что вы можете сделать одностороннюю публикацию в ребусе с односторонним режимом. Но я думал, что односторонний режим разрешает только bus.send?

Если в сценарии, где у меня есть два приложения, оба могут публиковать сообщение SomethingHappened, но только одно приложение должно обрабатывать ответ от ProcessManager, например DoSomethingElse, как мне настроить ребус для обоих приложений?

С Уважением

Инь


person Yin    schedule 01.09.2014    source источник


Ответы (1)


Но я думал, что односторонний режим разрешает только bus.send?

Ничто не помешает вам сделать bus.Publish с одностороннего клиента, если у него правильно настроено хранилище подписок. И если что-то еще заполняет это хранилище подписок некоторыми подписками (например, вы, вставляя их вручную в базу данных или заставляя другого издателя обрабатывать подписку / отменить подписку), тогда что-то может действительно произойти, когда вы публикуете;)

как мне настроить ребус для обоих приложений?

Не имея полностью четкого представления о вашем сценарии, я думаю, что

  • у одного издателя, A, есть очередь ввода: publisherA
  • другой издатель, B, не имеет очереди ввода (т.е. это односторонний клиент)
  • два издателя совместно используют хранилище подписок (например, таблицу в SQL Server)
  • два издателя публикуют сообщения из сборки StuffToPublish
  • другие конечные точки имеют сопоставление конечных точек, которое сопоставляет StuffToPublish с publisherA, поэтому bus.Subscribe с типом события из StuffToPublish заставит издателя A установить подписку
  • опубликованные сообщения от A и B будут отправлены одним и тем же подписчикам, потому что они совместно используют хранилище подписки

Если вы хотите, чтобы издатель A обрабатывал ответы, даже если событие было опубликовано издателем B, вы можете заставить B предоставить заголовок rebus-return-address (который в противном случае автоматически устанавливался бы, если бы у B была очередь ввода) следующим образом:

bus.AttacheHeader(someEvent, Headers.ReturnAddress, "publisherA");

Таким образом, ответы будут отправляться во входную очередь publisherA.

person mookid8000    schedule 01.09.2014
comment
Спасибо еще раз. Именно то, что мне нужно! - person Yin; 01.09.2014