25.惰性队列

介绍

消费者由于各种原因而致使长时间不能消费消息造成堆积。比如有一百万条消息发送到mq中,消费者这时宕机了不能消费消息,造成了消息堆积。惰性队列就有必要了。

正常情况下,消息保存在内存中。消费者从内存中读取消息消费,速度快。

惰性队列,消息保存在磁盘中,消费者从磁盘读取消息进行消费,速度慢。

配置惰性队列

在web管理控制台设置惰性队列

通过代码声明 

Map<String, Object> arguments = new HashMap<>();
arguments.put("x-queue-mode", "lazy");//设置为惰性队列
channel.queueDeclare(QUEUE_NAME, true, false, false, arguments);

内存占用情况

例如发送一百万条消息,每条消息大概占1kb的情况下,普通队列占用内存是1.2GB,而惰性队列占1.5mb,其他消息内容存放在磁盘的,内存只会存放这些消息的索引。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
RabbitMQ 中的惰性队列是指当队列被声明时,它不会立即分配内存和处理其他资源,而是在需要时才进行分配。这种延迟分配的机制可以减少系统的资源消耗,尤其对于具有大量队列但只有少数活动的情况下更为有效。 当消息发送到一个惰性队列时,RabbitMQ 会根据需要进行内存分配和其他资源的处理。通过这种方式,RabbitMQ 可以有效地管理资源,只为实际需要处理的队列分配资源,而不是为所有队列预先分配资源。 惰性队列对于动态创建临时队列或者处理大量长时间闲置的队列非常有用。它可以帮助减少内存使用量,并提高整体系统的性能和可伸缩性。 要使用惰性队列,只需在声明队列时设置 `x-queue-mode` 参数为 `lazy` 即可。例如,使用 RabbitMQ 的 AMQP 客户端库声明一个惰性队列的示例如下: ```python import pika connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() channel.queue_declare(queue='my_queue', arguments={'x-queue-mode': 'lazy'}) connection.close() ``` 在上述示例中,通过在声明队列时传递 `arguments` 参数,我们可以设置 `x-queue-mode` 参数的值为 `'lazy'`,以创建一个惰性队列。 需要注意的是,惰性队列可能会增加一些延迟,因为在消息被发送到队列后,RabbitMQ 需要进行资源分配和处理。因此,在设计应用程序时,需要谨慎考虑惰性队列的使用场景,以确保它们符合特定需求的性能要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卷土重来…

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值