巧用mq特性解决消息积压问题

一 消息积压问题

什么是消息积压问题?

假设我们有5台业务服务器,每台都具备峰值100req/s 的能力,但是在某种场景下,我们的消息请求来到了600个/s,那么此时我们的业务服务器肯定是无法被及时消费的,此时消息要么堆积导致新的消息无法进入,要么就是被丢弃,如下图:

![image](images/M_ZF1VQh5o6AyEatBEOE9P1Wi0jGhpCMr06KZE7B0IY.png)

那么遇到这种情况我们应该怎么处理呢?(本次仅针对此消息被谁消费以及顺序不受影响的场景)

二 解决方案

我们可以巧用mq的死信队列来解决这个问题:

什么是死信?

即过期或无法处理的消息。

死信是怎么产生的?

  1. 消费者拒绝接受,且没有重新入列的消息
  2. 队列满了,无法入列的消息
  3. 消息设置了TTL过期时间,超过有效时间后的消息
  4. 队列设置了TTL过期时间,超过有效时间后的消息

![image](images/9fKF7mpNJHZboLuy7_ZS0aJPW-zQuw4dx_ZU1woMNWs.png)

简而言之就是将进入死信队列的消息,重新发送到一个死信队列,由单独的消费者消费此死信队列,在设置的时间内进行重发。

![image](images/O1rOOwf45jzOsml99I40Tg2A9aqebehpBqrCpE8xJsM.png)

Last modification:July 5, 2022
If you think my article is useful to you, please feel free to appreciate