上一篇介绍并搭建了Spring-Rabbit工程,并且创建了一个名为MyQueue的队列。下面补充一个有关持久化和非持久化队列的知识点。
登录RabbitMQ的图形化管理界面,选择“Queue”队列查看模块,可以看到之前在Spring-Rabbit工程中创建的MyQueue的队列:
我们可以观察到在“myQueue”列中,后面有一个Features的属性,为“D”,和下面的队列都有不同,这是一个什么参数呢?其实该参数“D”就是“durable”的意思,即“持久的”,也就是说名为“myQueue”的队列,是一个持久化队列,而下面Features属性为空的队列就是非持久化队列。
持久化队列和非持久化队列的区别是,持久化队列会被保存在磁盘中,固定并持久的存储,当Rabbit服务重启后,该队列会保持原来的状态在RabbitMQ中被管理,而非持久化队列不会被保存在磁盘中,Rabbit服务重启后队列就会消失。
我们现在将Rabbit服务重启:
然后刷新RabbitMQ的Queue管理界面,可以看到现在只剩下状态为持久化的“myQueue”队列了:
非持久化比持久化的优势就是,由于非持久化不需要保存在磁盘中,所以使用速度就比持久化队列快。即是非持久化的性能要高于持久化。
而持久化的优点就是会一直存在,不会随服务的重启或服务器的宕机而消失。
在Spring的配置中,在定义队列的配置中,将参数durable设置为“false”,则该队列为非持久化队列,设置成“true”时,该队列就为持久化队列:
<!-- 定义队列,自动声明 -->
<rabbit:queue name="myQueue" auto-declare="true" durable="true"/>
那么,在日常开发中,我们是需要是用持久化队列还是非持久化队列呢?这个需要看系统业务的具体需求。如果需要队列的完整性,数据在队列中的保存是必须不允许丢失的,那么可以使用持久化。而当需要获取的信息是实时的,或者是随机的信息,不需要信息的精确性或完整性,但是追求获取性能,可以选择非持久化队列。
标签:11,持久,队列,Spring,RabbitMQ,Rabbit,消息中间件,myQueue From: https://blog.51cto.com/u_16012040/6131000