之所以引用惰性队列,就是为了提高消息的堆积能力,传统的RabbitMQ的消息默认是存储在内存当中,当并发量高的时候,容易造成消息堆积,当占用内存百分之40时,MQ会暂时停止生产者的消息投递,将一部分消息保存在磁盘中,从到导致暂时的不可用状态,MQ的性能也就忽高忽低。而惰性队列是直接保存在磁盘当中,保证了MQ的稳定性,但损耗了性能。
控制台创建Lazy Queue 队列
java代码创建 Lazy Queue 队列
基于bean的方式创建惰性队列
用注解的方式
其中queue和queusTodeclare的区别
在RabbitMQ中,queuesToDeclare和queue是两个不同的概念。
-
queuesToDeclare(声明队列)是一个配置项,用于在RabbitMQ的客户端代码中指定要声明的队列。它可以是一个队列的列表,客户端将根据配置在连接到RabbitMQ时自动声明这些队列。这样可以确保在使用队列之前,它们已经存在于RabbitMQ中。
-
queue(队列)是RabbitMQ中的基本组件之一,用于存储消息。客户端可以通过将消息发布到队列来发送消息,而消费者可以从队列中接收和处理消息。队列具有名称、持久化属性、自动删除属性以及其他配置参数,这些属性和参数可以在客户端代码中指定或在RabbitMQ的管理界面中进行设置。
区别在于,queuesToDeclare是客户端代码中的一个配置项,用于在连接到RabbitMQ时自动声明队列,而queue是RabbitMQ中实际存在的消息队列实体。queuesToDeclare用于告诉客户端需要声明哪些队列,而queue则是实际的队列对象,用于存储和处理消息。通过声明队列,客户端可以确保队列在使用之前已经存在,避免了因队列不存在而引发的错误。
结果
接下来我发送100万条数据,测试一下性能
结果
我们可以看到图中他的峰值拿到了每秒6万条,并且不阻塞
重启mq看消息是存在,因为我们刚刚设置的持久化消息
消息是在的