我通过关闭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)
。据我所知,这个工作正常。因为队列上的命令实际上处理得很好......他们只是不发布任何事件。
答案 0 :(得分:1)
我猜测由于端点是自包含的,因此NSB不会隐式启动对自身的订阅。您可以尝试明确设置订阅,它应该工作。这在某种程度上是一种非典型的情况,并且无法隐含地发挥作用。