Публикация событий NServiceBus из обработчика команд

Я пытаюсь реализовать простой POC для решения NServiceBus. Итак, я реализовал 3 конечные точки, назовем их A,B и C. A размещается в консольном приложении самостоятельно, B и C - хосты NSB. В A я отправляю команду DoFoo, в B я обрабатываю DoFoo, и внутри обработчика я публикую несколько событий типа BarOccurred следующим образом:

for (int i=0; i<5; i++)
{
  Bus.Publish(new BarOccurred);
  Thread.Sleep(1000);
}

В Си я подписываюсь и обрабатываю это, записывая в консоль, что Бар произошел.

Я ожидал увидеть сообщение, обработанное в C, каждый раз, когда B публикует его (т.е. каждую секунду). Однако поведение, которое я вижу, состоит в том, что только после выхода из обработчика команды (после 5 итераций) только тогда все 5 сообщений получаются C.

Это ожидаемое поведение для конфигурации по умолчанию? Нужно ли мне что-то объявлять, чтобы отправлять и обрабатывать сообщения сразу после их публикации?

1 ответ

Bus.Publish находится в одной транзакции и фиксируется после отправки всех сообщений. Я бы посмотрел, может ли упаковка всех сообщений в одну Bus.Publish(IMesssage[]) удовлетворить ваши потребности. Это превращается в 1 сообщение на проводе.

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