赞
踩
在消息队列中,消息堆积是生产环境中的需要考虑的问题,一旦消息产生积压,来不及消费,可能会导致MQ服务器宕机,而解决消息积压有这样一些方案解决:
可以根据业务情况适当添加多台服务器部署消费者服务实例,消费者数量增加,可以有效提高消息的消费速度,但这需要考虑服务器成本
单个消费者服务实例中,可以整合线程池,将消息的消费任务提交给线程池中的多个线程进行处理。但也存在需要考虑的问题,当任务处理耗时比较长,任务比较多的情况下,线程会处于频繁切换的状态,这对于CPU来说,是一种资源浪费,而且任务数量多,可能会导致线程池中的线程都处于使用状态,任务阻塞队列达到瓶颈,这时候会触发拒绝策略,对于不重要的消息的消息可以进行丢弃,重要的消息可以交给主线程处理,这时候又回到原始状态。因此单个消费者增加线程池使用于任务耗时比较短,线程池可以很好处理消息任务的情况。
在RabbitMQ中,提供了一种惰性队列,所谓的惰性队列是将消息从内存快刷到磁盘,在牺牲性能的情况下保证MQ不会因为消息堆积而导致内存爆满。并且性能稳定,支持百万消息的磁盘快刷。定义惰性队列也很简单,只需要添加lazy熟悉即可。
- @Bean
- public Queue lazyQueue() {
- return QueueBuilder
- .durable("lazy.queue")
- .lazy()
- .build();
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。