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

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

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

С уважением

Инь

1 ответ

Решение

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

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

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

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

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

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

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

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

Другие вопросы по тегам