00:00 / 02:06
连播
清屏
智能
倍速
点赞17
00:00 / 57:17
连播
清屏
智能
倍速
点赞0
00:00 / 57:06
连播
清屏
智能
倍速
点赞9
00:00 / 09:52
连播
清屏
智能
倍速
点赞8
00:00 / 57:06
连播
清屏
智能
倍速
点赞2
00:00 / 06:24
连播
清屏
智能
倍速
点赞7
00:00 / 03:57
连播
清屏
智能
倍速
点赞8
深入总结MQ消费者ack消息的机制 深入总结MQ消息可靠性中消费者环节。关于消费者ack确认消息的机制。在消费者端,如果成功消费消息,也就是说业务根据消息携带的信息成功执行完成,没有异常,给MQ返回一个ack回执,最终MQ收到ACK回执,在队列中删除该消息,完美闭环。但是实际中可能遇到很多问题。比如业务处理超时,执行业务的时候遇到数据库死锁,调用第三方服务的时候网络抖动,业务代码bug等。此时我们给MQ发送回去的是nack回执。MQ在收到nack回执之后,将消息重新返回队列,然后再进行投递给消费者,如果没有成功一直重复这个过程。还有一种是直接拒绝消息,消费者返回reject回执给MQ,MQ收到这个回执之后就直接进行消息的删除。在nack的情况下,Spring AMQP提供了一种本地重试的机制,也就说消息不重新回到MQ端,而是直接在本地进行重试,如果重试次数耗尽之后,默认就将消息进行丢弃,尽管出现这种情况非常极端。但是有些高可靠性的业务,还是要确保这种消息不丢失,那么Spring AMQP在本地重试的基础之上提供了失败处理策略,也就说我们可以将重试之后最终还是失败的情况,将消息投递到其他队列。上面是消费者对于消息的三种处理方式:ack,nack,reject.但是有一种情况值得啰说一下,那就是加入业务处理超时,业务代码执行了很长时间,此时MQ不会一直等待你消费者的回执,MQ在等待了一段时间后,认为你消费端已经宕机了,它自动将消息进行重回队列。当消费者业务代码运行完成再返回ack回执的时候,MQ会直接进行忽略,因为此时返回的回执的deliveryTag已经是无效的了。好的,今天详细的总结了MQ消费者ack的所有流程情况,自己也非常掌握清楚了。继续加油努力,Love Java.#java #RabbitMQ #java程序员 #黑马程序员 #上热门🔥 @豆包 @DOU+小助手 @DOU+上热门
00:00 / 49:18
连播
清屏
智能
倍速
点赞15