如何配置MassTransit以在发生故障时重试context.Publish()?

时间:2017-06-07 12:38:12

标签: c# masstransit

如何配置MassTransit在失败前重试context.Publish(),例如当RabbitMQ服务器暂时不可用时?

1 个答案:

答案 0 :(得分:2)

在此上下文中重试的问题是Publish调用失败的唯一真正原因是代理连接丢失(出于任何原因:网络等)。

在这种情况下,用于接收消息的连接也会丢失,这意味着连接到代理的另一个节点可能已经接收到该消息。因此,在这种情况下重试会很糟糕,因为它会重新连接到代理并发送,但是然后无法确认消息(因为它很可能在另一个线程/工作者处被接收)。

这里通常的做法是让它失败,当接收端点重新连接时,消息将被重新传递给消费者,然后消费者将调用Publish并达到预期的结果。

您应该确保您的消费者能够正确处理此问题(正确搜索幂等),以避免导致业务逻辑中断的失败。