rabbitmq - 异步处理消息时处理异常的 RabbitMQ 最佳实践
问题描述
注册了一个rabbitmq消息的异步消费者。没有得到官方建议如何处理异步消费者操作中的流程异常?
可能需要重试队列消息/将消息重新发布到具有重试次数限制的队列。
解决方案
从 rabbitMq 中的队列消费时,您可以设置一个名为 noAck 的选项,该选项可以为真或假。
true
如果发生无法处理的错误,它将确认消息false
将自动对消息进行 nack 并留在队列中以供稍后拉取。
(这将取决于您为消费者使用的语言。noAck = nodejs、autoAck = c# 等)
consumer.consume(q.queue, function (message) {
// your code
}, {noAck: false});
关于设置有限重试,我必须自己通过在我正在传递的消息的标题中传递重试计数来执行此操作,并且必须在将带有修改后的标题的新版本发送回队列之前确认我正在阅读的消息。我使用多个队列来维护消息完整性,但这可以通过一个队列来完成。
我希望这有帮助。
推荐阅读
- python - 如何在数据框中分离类的各个成员,然后按名称返回它们?
- firebase - Firestore REST API 是否支持与 SDK 的 FieldValue 等效的值?
- php - 如果没有给出参数,我如何获得默认的空值
- c - 在 Visual Studio 中检测到堆损坏,但程序在另一个 C 编译器中运行良好:为什么?
- powershell - 返回用户定义类实例的powershell函数将导致构造函数返回一个新的另一个实例
- r - 从基因组中提取特定转录序列的问题
- prolog - SWI Prolog 中的 CHR:包含“刚刚删除”约束的规则保护不返回,破坏堆栈
- snowflake-cloud-data-platform - 你如何在雪花中获得任务的 DDL?
- c++ - C++:奇怪的除法输出
- java - 使用 Unirest 和 Java 和 Selenium WebDriver 解析 Json