一、如何解决消息队列的延时以及过期失效问题?
MQ 中消息失效问题原因:
在 RabbitMQ 中可以设置过期时间,也就是 TTL。如果消息在 queue 中积压超过一定的时间就会被 RabbitMQ 给清理掉,这个数据就没了。RabbitMQ 的死信队列、延迟队列
解决消息失效的方法:
我们可以采取一个方案,就是批量重导,当消息大量积压的时候,我们可以先丢弃掉数据,然后等过了高峰期之后,我们就开始写个临时程序,将丢失的那批数据一点一点的查出来,然后重新放入 MQ 中进行处理,相当于手动发到 MQ 里去再补一次。
二、消息队列满了以后怎么处理?
如果消息积压在 mq 里,很长时间没有处理掉,导致 mq 快写满了,那只能写个临时程序,接入数据来消费,消费一个丢弃一个,都不要了,快速消费掉所有的消息。
然后走上面 “批量重导” 的方案,过了高峰期再补数据,重新放到 MQ 中进行处理。