【发布时间】:2016-07-19 15:45:37
【问题描述】:
我正在将 RMQ 集成到我的项目中,以实现工作队列。
我知道如果模块成功了,它会调用 ack 方法以便 RMQ 知道它。
失败怎么办?
我读到只有当连接或通道关闭时,RMQ 才知道我们已经失败并重新将消息推送到队列。
但是,无论我是否崩溃(例如,无法插入数据库,我都会优雅地处理它而不会崩溃,但是我想要整个工作)重试)。
我是否必须手动关闭并再次打开通道才能触发?
【问题讨论】:
我正在将 RMQ 集成到我的项目中,以实现工作队列。
我知道如果模块成功了,它会调用 ack 方法以便 RMQ 知道它。
失败怎么办?
我读到只有当连接或通道关闭时,RMQ 才知道我们已经失败并重新将消息推送到队列。
但是,无论我是否崩溃(例如,无法插入数据库,我都会优雅地处理它而不会崩溃,但是我想要整个工作)重试)。
我是否必须手动关闭并再次打开通道才能触发?
【问题讨论】:
您可以使用否定 ACK 或拒绝。信息here。
AMQP 规范定义了 basic.reject 方法,它允许 客户拒绝个别的、传递的消息,指示 经纪人要么丢弃它们,要么重新排队。
【讨论】: