巧用mq特性解决消息积压问题
一 消息积压问题
什么是消息积压问题?
假设我们有5台业务服务器,每台都具备峰值100req/s 的能力,但是在某种场景下,我们的消息请求来到了600个/s,那么此时我们的业务服务器肯定是无法被及时消费的,此时消息要么堆积导致新的消息无法进入,要么就是被丢弃,如下图:
那么遇到这种情况我们应该怎么处理呢?(本次仅针对此消息被谁消费以及顺序不受影响的场景)
二 解决方案
我们可以巧用mq的死信队列来解决这个问题:
什么是死信?
即过期或无法处理的消息。
死信是怎么产生的?
- 消费者拒绝接受,且没有重新入列的消息
- 队列满了,无法入列的消息
- 消息设置了TTL过期时间,超过有效时间后的消息
- 队列设置了TTL过期时间,超过有效时间后的消息
简而言之就是将进入死信队列的消息,重新发送到一个死信队列,由单独的消费者消费此死信队列,在设置的时间内进行重发。