在消息队列中,消息堆积是生产环境中的需要考虑的问题,一旦消息产生积压,来不及消费,可能会导致MQ服务器宕机,而解决消息积压有这样一些方案解决:
1.增加消费者数量
可以根据业务情况适当添加多台服务器部署消费者服务实例,消费者数量增加,可以有效提高消息的消费速度,但这需要考虑服务器成本
2.单个消费者中增加线程池来异步处理消息
单个消费者服务实例中,可以整合线程池,将消息的消费任务提交给线程池中的多个线程进行处理。但也存在需要考虑的问题,当任务处理耗时比较长,任务比较多的情况下,线程会处于频繁切换的状态,这对于CPU来说,是一种资源浪费,而且任务数量多,可能会导致线程池中的线程都处于使用状态,任务阻塞队列达到瓶颈,这时候会触发拒绝策略,对于不重要的消息的消息可以进行丢弃,重要的消息可以交给主线程处理,这时候又回到原始状态。因此单个消费者增加线程池使用于任务耗时比较短,线程池可以很好处理消息任务的情况。文章来源:https://www.toymoban.com/news/detail-513514.html
3.采用RabbitMQ提供的惰性队列
在RabbitMQ中,提供了一种惰性队列,所谓的惰性队列是将消息从内存快刷到磁盘,在牺牲性能的情况下保证MQ不会因为消息堆积而导致内存爆满。并且性能稳定,支持百万消息的磁盘快刷。定义惰性队列也很简单,只需要添加lazy熟悉即可。文章来源地址https://www.toymoban.com/news/detail-513514.html
@Bean
public Queue lazyQueue() {
return QueueBuilder
.durable("lazy.queue")
.lazy()
.build();
}
到了这里,关于RabbitMQ消息堆积方案处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!