【问题标题】:How to handle failed publish with RabbitMq?如何使用 RabbitMq 处理失败的发布?
【发布时间】:2018-04-25 20:30:40
【问题描述】:
我们计划将 RabbitMq 用于我们的消息传递服务,我们会将所有消息请求发布到 RabbitMq 持久队列。
对于 .Net 客户端,我们决定使用 EasyNetQ,所以问题是我们在发布消息时应该如何处理 RabbitMq 服务器?
- 我们是否应该捕获异常并将消息保存到数据库和
使用预定的作业重新发布?
- 我们应该使用断路器吗?
- 还是什么?我想听听你的经历。
【问题讨论】:
标签:
rabbitmq
message-queue
easynetq
【解决方案1】:
一般来说,如果您想确定发布信息,可以使用publish confirmation。
如您所见,您可以使用事务或使用 ConfirmListener 来做到这一点。
要处理代理失败,您可以将失败的消息存储在本地,然后在 x 秒后尝试重新发送。
注意:我不知道 EasyNetQ 是如何工作的,但是原生发布是异步的,所以捕获发布异常是不够的。这就是为什么你应该使用发布确认来处理它。