NServiceBus не запускает прослушиватели событий при запуске

Я играл с отказоустойчивостью своей системы, отключая конечную точку 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) для конечной точки и клиента. Насколько я знаю, это прекрасно работает ... потому что команды в очереди на самом деле обрабатываются нормально ... они просто не публикуют никаких событий.


person Simon Whitehead    schedule 25.03.2014    source источник
comment
Я наблюдаю такое же поведение. Я отключил подписчика, поставил несколько сообщений в очередь с Bus.Send от моего клиента. Когда я запускаю подписчиков, команды обрабатываются, а подписанные события - нет. Затем я могу отправить другое сообщение, и мои обработчики событий сработают. Это потому, что я использую InMemoryPersistence?   -  person Kevin Raffay    schedule 19.06.2016
comment
Какой тип настойчивости вы используете?   -  person Szymon Pobiega    schedule 20.06.2016


Ответы (1)


Я предполагаю, что, поскольку конечная точка является автономной, NSB не будет инициировать подписку на себя неявно. Вы можете попробовать явно настроить подписку, и она должна сработать. Это несколько нетипичный сценарий и не будет работать неявно.

person Adam Fyles    schedule 25.03.2014
comment
Как мне настроить эту подписку вручную? Все, что я прочитал / увидел, не упоминает о ручной подписке. Следует ли это делать из пользовательского интерфейса или из конечной точки? - person Simon Whitehead; 26.03.2014
comment
Во время запуска вы можете использовать Bus.Subscribe (). - person Adam Fyles; 26.03.2014
comment
Я не могу подтвердить такое поведение. У нас есть то, что вы назвали автономными конечными точками с pub-sub внутри, и подписка работает отлично. - person Alexey Zimarev; 14.03.2015