??个人主页:https://blog.youkuaiyun.com/2301_80050796?spm=1000.2115.3001.5343
??热门专栏:
?? Java基本语法(97平均质量分)https://blog.youkuaiyun.com/2301_80050796/category_12615970.html?spm=1001.2014.3001.5482
?? Collection与数据结构 (92平均质量分)https://blog.youkuaiyun.com/2301_80050796/category_12621348.html?spm=1001.2014.3001.5482
??线程与网络(96平均质量分) https://blog.youkuaiyun.com/2301_80050796/category_12643370.html?spm=1001.2014.3001.5482
??MySql数据库(93平均质量分)https://blog.youkuaiyun.com/2301_80050796/category_12629890.html?spm=1001.2014.3001.5482
??算法(97平均质量分)https://blog.youkuaiyun.com/2301_80050796/category_12676091.html?spm=1001.2014.3001.5482
?? Spring(97平均质量分)https://blog.youkuaiyun.com/2301_80050796/category_12724152.html?spm=1001.2014.3001.5482
??Redis(97平均质量分)https://blog.youkuaiyun.com/2301_80050796/category_12777129.html?spm=1001.2014.3001.5482
??RabbitMQ(97平均质量分) https://blog.youkuaiyun.com/2301_80050796/category_12792900.html?spm=1001.2014.3001.5482
感谢点赞与关注~~~
目录
1. 消息确认
1.1 消息确认机制
生产者发送消息之后,到达消费端之后,可能会有以下情况:一种是消息处理成功,一种是消息处理异常.
如果消息处理异常的情况下,这条消息就会被删除,此时就会造成消息的丢失.此时我们就需要保证消息可靠地到达消费者,RabbitMQ为此提供了消息确认的机制.
消费者在订阅队列的时候,可以之地宁autoAck
参数,根据这个参数,消息确认的机制可以分为一下的两种:
- 自动确认,
autoAck
参数为true.RabbitMQ的队列会把发送出去的消息自动置为确认,然后自动从内存或者硬盘中删除,而不管消费者是否真正地消费到了这些消息. - 手动确认,
autoAck
参数为false.RabbitMQ的队列会等待消费者显示调用Basic.Ack命令,回复确认信号之后才从内存或者硬盘中进行删除.
对于手动确认的队列中的消息而言,队列中的消息分为两部分:
是等待投递给消费者的消息.
二是已经投递给消费者,但是还没有收到消费者确认信号的消息.
如果RabbitMQ一直没有收到消费者的确认消息信号,则RabbitMQ会安排这个消息重新进入队列,等待投递个下一个消费者,当然下一个消费者还是有可能是原来的消费者.
1.2 手动确认方法
消费者在收到消息之后,可以选择确认,也可以选择直接拒绝或者跳过,RabbitMQ也提供了不同的确认应答的方式.一共有以下三种:
- 肯定确认:
Channel.basicAck(long deliveryTag, boolean multiple)
这种方法表示的是