rabbitmq惰性队列

编程

介绍

RabbitMQ 在3.6.0版本引入了惰性队列的概念,惰性队列会尽可能地将消息存入到磁盘中,而在消费者消费响应消息的时候才会被加载到内存

中,它的一个重要设计目标是能够支持更长的队列.

默认情况下, RabbitMQ 会尽量把消息存储在内存中,这样可以更加快读地将消息发送给消费者.当 RabbitMQ 需要释放内存的时候,会将内存中

的消息换入至磁盘,这个操作会耗费较长的时间,同事阻塞队列操作,进而无法接受到新的消息.

惰性队列会将接受到的消息直接存入文件系统,而不管是持久化还是非持久化的消息,从而尽量减少内存消耗,但是会增加 IO 的是同,如果是

持久化消息,这个 IO 操作是不可避免的.

队列具备两种模式: default 和 lazy, 默认为 default 模式, lazy 模式即为惰性队列模式

注意:惰性队列中的非持久化数据,重启后消息一样会丢失

声明惰性队列

可以通过调用 channel.queueDeclare 方法在参数中设置也可以通过 Policy 的方式设置,如果两种方式同时存在, Policy 方式优先级更高

代码示例

public class T20_LazyQueue {

@Test

public void declareLazyQueue() throws IOException, TimeoutException {

ConnectionFactory factory = new ConnectionFactory();

factory.setUsername("sun");

factory.setPassword("111111");

factory.setVirtualHost("test");

factory.setHost("192.168.32.61");

factory.setPort(5672);

Connection conn = factory.newConnection();

Channel channel = conn.createChannel();

channel.queueDeclare("lazy_queue", true, false, false,

ImmutableMap.of("x-queue-mode", "lazy"));

channel.close();

}

}

惰性队列优势

惰性队列与普通队列相比,只有很小的内存开销

以上是 rabbitmq惰性队列 的全部内容, 来源链接: utcz.com/z/511956.html

回到顶部