NServiceBus不会在启动时触发事件监听器

本文关键字:事件 监听器 启动 NServiceBus | 更新日期: 2023-09-27 17:53:25

我通过关闭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)。据我所知,这很好。因为队列上的命令实际上处理得很好…他们只是不发布任何事件。

NServiceBus不会在启动时触发事件监听器

我猜,由于端点是自包含的NSB将不会隐式地启动对自身的订阅。您可以尝试显式设置订阅,它应该可以工作。这是一个非典型的场景,不会隐式地工作。