0

我们有一个审核消息处理程序,如果在此处理程序中引发任何异常,我们希望它向 LogMessageInputQueue 发送一条日志消息,该消息将由另一个消息处理程序处理。

是否可以从 NServiceBus 主机进程中发送新消息?AuditMessageHandler 在其构造函数中接受处理程序 IBus,但在调用时

_bus.Send(new LogFatalMessage(ex));

没有抛出异常,但消息没有出现在 LogMessageInputQueue 上,似乎只是消失了......

所有的处理程序和队列都在同一台机器上。

4

1 回答 1

1

好的,这一切都是我自己想出来的:)

在 _bus.Send(new LogFatalMessage(ex)) 我们重新抛出原始错误之后,这会导致 NServiceBus 回滚其事务并从 LogMessageInputQueue 中删除消息。

通过将 _bus.Send() 包装在它自己的事务中,我们阻止 NServiceBus 事务的回滚从队列中删除 LogMessage。

using (var ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
    _bus.Send(new LogFatalMessage(ex));
    ts.Complete();
}
于 2012-05-03T13:23:27.653 回答