从NServiceBus主机发送消息

时间:2012-05-03 12:54:08

标签: c# nservicebus nservicebus3

我们有一个Audit Message Handler,如果在这个处理程序中抛出任何异常,我们希望它向LogMessageInputQueue发送一条日志消息,该消息将由另一个Message Handler处理。

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

_bus.Send(new LogFatalMessage(ex));

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

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

1 个答案:

答案 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();
}