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