RabbitMQ实战-消费端ACK、NACK及重回队列机制
【摘要】 1 ACK和NACK
当设置autoACK=false 时,就可以使用手工ACK。 其实手工方式包括了手工ACK、手工NACK。
手工 ACK 时,会发送给Broker一个应答,代表消息处理成功,Broker就可回送响应给ProNACK 则表示消息处理失败,如果设置了重回队列,Broker端就会将没有成功处理的消息重新发送
使用方式
Con消费时,若由于业务异常...
1 ACK和NACK
当设置autoACK=false
时,就可以使用手工ACK。
其实手工方式包括了手工ACK、手工NACK。
- 手工 ACK 时,会发送给Broker一个应答,代表消息处理成功,Broker就可回送响应给Pro
- NACK 则表示消息处理失败,如果设置了重回队列,Broker端就会将没有成功处理的消息重新发送
使用方式
Con消费时,若由于业务异常,可手工 NACK 记录日志,然后进行补偿
void basicNack(long deliveryTag, boolean multiple, boolean requeue)
如果由于服务器宕机等严重问题,就需要手工 ACK 保障Con消费成功
void basicAck(long deliveryTag, boolean multiple)
2 消费端的重回队列
重回队列针对没有处理成功的消息,将消息重新投递给Broker。
重回队列会把消费失败的消息重新添加到队列尾端,供Con重新消费。
一般在实际应用中,都会关闭重回队列,即设置为false。
3 代码实战
- Con,关闭自动签收功能
- 自定义Con,对第一条消息(序号0)进行NACK,并设置重回队列
- Pro 对消息设置序号,以便区分
- 启动Con,查看管控台
- 启动Pro,这里第一条消息由于我们调用了NACK,并且设置了重回队列,所以会导致该条消息一直重复发送,消费端就会一直循环消费
文章来源: javaedge.blog.csdn.net,作者:JavaEdge.,版权归原作者所有,如需转载,请联系作者。
原文链接:javaedge.blog.csdn.net/article/details/94124938
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)