我们有一个Audit Message Handler,如果在这个处理程序中抛出任何异常,我们希望它向LogMessageInputQueue发送一条日志消息,该消息将由另一个Message Handler处理。
是否可以从NServiceBus主机进程中发送新消息? AuditMessageHandler在其构造函数中接受处理程序IBus,但在调用
时_bus.Send(new LogFatalMessage(ex));
没有抛出任何异常,但该消息没有出现在LogMessageInputQueue上,似乎只是消失...
所有处理程序和队列都在同一台机器上。
答案 0 :(得分: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();
}