当生产者发送消息的速度超过了消费者处理消息的速度,就会导致队列中的消息堆积,直到队列存储消息达到上限。最
早接收到的消息,可能就会成为死信,会被丢弃,这就是消息堆积问题。
解决消息堆积有三种种思路:
更多消费者
,提高消费速度线程池
加快消息处理速度队列容积
,提高堆积上限从RabbitMQ
的3.6.0
版本开始,就增加了Lazy Queues
的概念,也就是惰性队列。惰性队列的特征如下:
磁盘
而非內存百万条
的消息存储@Bean
public Queue lazyQueue(){
return QueueBuilder
.durable("lazy.queue")
.lazy()
.build();
}
@RabbitListener(bindings = @QueueBinding(
value = @Queue(name = "lazy.queue", arguments = @Argument(name = "x-queue-mode", value = "lazy")),
exchange = @Exchange(name = "simple.exchange"),
key = "lazy"
))
public void listenLazyExchange(String msg){
// log.info("消费者接收到lazy.queue的消息:【" + msg + "】");
}