RabbitMQ实战-消费端ACK、NACK及重回队列机制

举报
JavaEdge 发表于 2021/06/04 02:12:07 2021/06/04
2.8k+ 0 0
【摘要】 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

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。