抛出异常时如何从nservicebus处理程序发送回复?

dar*_*iol 1 transactions exception nservicebus

我有一个服务(service1)从外部数据库读取数据.转换它并发送到队列.

第二个服务(service2)处理消息并处理它.处理失败时抛出异常并且NServiceBus重试5次以处理它(正常行为)但是永远不会发送回复.:(

所有服务都在交易中运作.

我的问题是: 当抛出异常时,如何从处理程序向service1发送回复(或者只发送不同的消息)?

我只想通知service1在service2上处理失败.

编辑1: 对于更具体的service1标记reeds外部数据库中的记录.需要进一步读取其他数据.

我想将service2的响应返回给service1,它取消了那些抛出异常的记录的记录.

从外部数据库读取数据的下一次迭代可以再次获取该记录.

Jon*_*ver 5

你总是可以包装Bus.Reply而不是它自己的TransactionScope,例如:

using (var scope = new TransactionScope(TransactionScopeOptions.RequiresNew))
{
    Bus.Reply(your message here)
    scope.Complete();
}
Run Code Online (Sandbox Code Playgroud)

这会将由于错误导致的事务与导致错误的事务分开.