开始
先来回忆消息流转的过程
在哪些环节消息的收发和流转可能流转可能会出现问题
首先这一块,消息真的发出去了吗,如果这个链接有问题。消息根本就没发上去。业务不就异常了吗?
所以我们需要一个机制,需要RabbitMQ确认消息发送了。
所以需要消息的确认机制。
消息真的被路由了吗?
确认消息被正确的路由了。
消息端处理的过来了吗
如果消费端的处理能力太差,而我们的队列几秒钟就发来一万条消息,一会又发来1万条消息,导致这个队列的消息越积越多,消费端处理消息一条的处理,导致我们RabbitMQ积压的消息越来越大,最后挤爆。
也就是这么多的消息不要同时推送给我接收端,要一条条的推,或者几条几条的推。或者按照一定的速率或者按照一定的要求来推。这就是消费端的限流机制。
消费端的处理异常
如果消费端有异常,有bug,业务崩溃,我们的发送端也不会知道。Message Broker也不知道。Message Broker只知道消息没读完就挂了。
之前我们都是消费端自动签收
所以又引入了消费端确认机制。
队列爆满怎么办?
如果消费端,处理的很慢,队列里面的消息全积压在一块。积压了很多,导致RabbitMQ会被挤爆,就会异常,整个业务就跑不下去了。
整个业务就跑不下去了。
默认情况下 会永存在这个队列里,除非它被消费走。如果消费者放弃了 或者消费者处理的慢。那就像一个大坝水库,挤压在MQ里面。越来越多。
新的机制,叫做,消息过期时间,防止消息大量的积压。
如果不想消息删除,就需要配合后面的机制。
转移过期消息
过期删除的消息就再也不见了。业务也异常了 ,跑步下去了。