Ezio's Blog
Posts Categories Tags Music Mood About
Ezio's Blog· Light
☰ Menu
Posts Categories Tags Music Mood About
Expand all Back to top Go to bottom

消息堆积

Author: Ezio Date: August 7, 2022  23:13:55 Category: RabbitMQ

当生产者发送消息的速度超过了消费者处理消息的速度,就会导致队列中的消息堆积,直到队列存储消息达到上限。最早接收到的消息,可能会成为死信,会被丢弃。

解决消息堆积三种思路:

  • 增加更多消费者,加快消费速度
  • 在消费者内开启线程池加快消息处理速度
  • 扩大队列容积,提高堆积上限

惰性队列

从RabbitMQ的3.6.0版本开始,增加了Lazy Queues的概念,也就是惰性队列。

惰性队列特征如下:

  • 接收到消息后直接存入磁盘而非内存
  • 消费者要消费消息时才会从磁盘中读取并加载到内存
  • 支持数百万条的消息存储

用SpringAMQP声明惰性队列的方式:

  • @Bean的方式:
1
2
3
4
5
6
@Bean
public Queue lazyQueue() {
return QueueBuilder.durable("lazy.queue")
.lazy()
.build();
}
  • 基于注解的方式:
1
2
3
4
5
6
7
8
9
@RabbitListener(bindings = @QueueBinding(
value = @Queue(name = "lazy.queue", durable = "true",
arguments = @Argument(name = "x-queue-mode", value = "lazy")),
exchange = @Exchange(name = "lazy.direct"),
key = "dl"
))
public void listenLazyQueue(String msg){
System.out.println("消费者接收到lazy.queue的消息:【" + msg + "】");
}

惰性队列的优点:

  • 基于磁盘存储,消息上限更高
  • 没有间歇性的page-out,性能比较稳定

缺点:

  • 基于磁盘存储,消息时效性会降低
  • 性能受限于磁盘的IO

Author: Ezio

Permalink: https://ezioy.cn/2022/08/07/%E6%B6%88%E6%81%AF%E5%A0%86%E7%A7%AF/

License: Copyright (c) 2019 CC-BY-NC-4.0 LICENSE

Slogan: Nothing is true,Everything is permitted

Tag(s): # RabbitMQ
back · home
Spring Gateway 死信交换机
Ezio © 2019 - 2026 | Powered by Hexo & Chic | 访客数量:   浏览次数: | 渝公网安备50011302222043 | 渝ICP备2023013933号-1