RabbitMQ Lazy Queue 延迟加载

Lazy Queue

在著名的单例设计模式中就有懒汉式的实现方式,也就是只有在你须要的时候我才去加载。 设计模式

这让博主想到了之前上学的时候,每到了假期的假期做业,在假期的时候是历来不作的。只有在快开学老师要检查的时候才去作,这也是一个懒汉式的体现,哈哈。 服务器

而RabbitMQ也是有lazy queue的,queue中的消息存在磁盘只有在consumer来找它要了,才会加载到内存。 并发

下面是官方文档,能够看到去lazy queue的介绍,lazy queue是在3.6.0版本被引入的,lazy queue的信息尽量的都保存在磁盘上,仅在消费者请求的时候才会加载到RAM中。 高并发

使用默认的queue,而且消息不持久化的话,都是放在RAM中的。当消息峰值的时候,大量的消息在RAM致使rabbitmq服务器压力过大,当RAM使用量到必定数字的时候就会由于压力把数据移到硬盘中,可是不要嗨皮,rabbitmq服务器重启后消息同样会丢失。并且过大的压力可能会出现各类各样的异常状况,这并非咱们想要看到的 spa

image

 

使用lazy queue会有如下几种搭配设计

lazy queue 消息不持久化 , 可是这种模式仍是会把消息放到硬盘里,RAM的使用率会一直很稳定,可是重启后同样会丢失消息 code

lazy queue 消息持久化,这种方式无疑是最佳搭配,消息放到硬盘而且不会由于服务器重启而丢失,面对高并发也是从容不已blog

设置lazy queue也很简单,下面代码是一个示例,x-queue-model : lazyrabbitmq

//声明一个懒队列
                channel.QueueDeclare("lazyqueue", true, false, false, new Dictionary<string, object>
                {
                    { "x-queue-mode","lazy"}
                });
相关文章
相关标签/搜索