【发布时间】:2018-07-02 18:54:00
【问题描述】:
我正在使用 NService 创建一个端点。
端点正在监听一个事件并进行一些计算,然后将结果(成功或失败)发布到其他端点
我知道 NServiceBus 支持 ImmediateRetry 和 DelayRetry,它们是可配置的。
现在,我想在所有重试后(在发送到错误队列之前)将失败结果事件发布到其他端点。
public async Task Handle(MyEvent message, IMessageHandlerContext context)
{
Console.WriteLine($"Received MyEvent, ID = {message.Id}");
//Connect to other services to get data and do some calculation
Thread.Sleep(1000);
Console.WriteLine($"Processed MyEvent, ID = { message.Id}");
await context.Publish(new MyEventResult { IsSucceed = true });
}
以上是我当前的代码。如果没有异常抛出,它将发布成功的结果。但是如果它有一个致命的异常,我不知道如何在消息发送到错误队列之前发布失败结果事件。
提前致谢。
注意:我使用的是 NServiceBus 6.4.3
【问题讨论】:
-
我正在尝试使用 7.1 版做同样的事情。我已经看到了这些行为,但它们似乎在初始调用和每次重试之后运行......而不是在所有重试都用尽之后,这是我需要做的。这个链接说它将在所有重试后被调用,但它似乎并没有像这样执行:“这个新行为已注册,以便在 NServiceBus 调用可恢复性机制后调用它。这包括二级重试,如果它们是启用。” docs.particular.net/nservicebus/pipeline/…
-
@ManOfSteele:感谢您的信息。我认为唯一的方法是自己实现延迟重试逻辑:D
标签: c# rabbitmq nservicebus