Я играл с отказоустойчивостью своей системы, отключая конечную точку NServiceBus и помещая сообщения в очередь MSMQ.
При запуске конечной точки (NServiceBus.Host.exe
) мои сообщения принимаются (это «Команды») и обрабатываются. Обработчики, обрабатывающие эти команды, также публикуют события. Однако эти события не обрабатываются. Кто-нибудь знает, почему это может быть?
Если я Send
новую команду, пока конечная точка работает, все работает нормально. Поток такой, когда хост NServiceBus уже запущен (правильно):
UI ->
Command ->
MSMQ ->
Endpoint ->
CommandHandler ->
Event ->
EventHandler
Это поток, когда сообщения находятся в очереди без запущенной конечной точки:
--Endpoint not running -- ->
UI ->
Command ->
MSMQ ->
--Endpoint started-- ->
CommandHandler ->
Nothing.
Обработчик событий находится в той же сборке, что и обработчики команд, которые принимают команды и обрабатывают их.
Просто кажется, что события не публикуются и / или не обрабатываются во время процесса запуска NService Bus. Сообщения принимаются, а команды обрабатываются ... но любые события, которые затем публикуются, не принимаются их слушателями и, следовательно, не обрабатываются.
Вы должны знать, что я позвонил PurgeOnStartup(false)
для конечной точки и клиента. Насколько я знаю, это прекрасно работает ... потому что команды в очереди на самом деле обрабатываются нормально ... они просто не публикуют никаких событий.