首页 > 代码库 > RabbitMQ 参数们的Power “续”

RabbitMQ 参数们的Power “续”

参数中的 arguments

之前讲参数的一些作用的时候,忽略了最后一个字典类型的参数,因为这个参数是大有文章的,值得单独进出来说道说道。

这时,就不得不打开我们的 Web UI管理系统了,可以看到在这边添加queue的时候,有Arguments下面有一些说明,Message TTL,Auto expire…….

技术分享

 

Message TTL

可以看到,点击一下Message TTL,它的参数名是 x-message-ttl 类型是number,那么这个应该怎么用呢?

技术分享

一起来看看官方解释,嗯。。。其实也就是在说,在声明队列的时候可以添加这个参数,那么它的作用是让发布的message在队列中可以存活多长时间,以毫秒为单位。更通俗点就是,设置了这个参数,发布的消息在queue时间超过了你设定的时间就会被删除掉。

技术分享

送上代码,不多说,先跑起来,这时就可以看到,在features也可以看到queue是ttl的

//声明一个queue,里面的内容自发布起五秒后被删除 channel.QueueDeclare("messagettlqueue", true, false, false, new Dictionary<string, object> { { "x-message-ttl", 5000 } });

技术分享

这个是针对queue的,当然更加定制化的针对message也是有的,也就是说可以让queue里的某条message在多久消失

var properties = channel.CreateBasicProperties();//设置过期时间properties.Expiration = "5000";channel.BasicPublish(null, "queue", properties, Encoding.UTF8.GetBytes("我五秒后就会消失"));

 

Auto expire

技术分享

之前是针对 queue中的消息或者消息本身,而这个才是针对queue,这里是官方解释,也就是说,当前的queue在指定的时间内,没有consumer、basic.get也就是未被访问,就会被删除。

 

技术分享

设置起来也是非常简单的

//声明一个queue,queue五秒内而且未被任何形式的消费,则被删除channel.QueueDeclare("queue", true, false, false, new Dictionary<string, object> { { "x-expires", 5000 } });

 

MaxLength与MaxLength bytes

相信到这里大家已经可以根据名字去猜测它的作用了,没错它们是设置queue的消息最大条数与消息最大占用大小

技术分享

并不是说,设置了最大长度为10,第11条数据插入的时候就会报错,而是在超过了最大长度后进行插入会删除之前插入的消息为本次的留出空间,也就是说无论什么时候,queue中的消息始终都是十条,相应的最大占用大小也是这个道理,当超过了这个大小的时候,会删除之前插入的消息为本次的留出空间。

//声明一个queue,最大长度10,最大大小2048bytes                channel.QueueDeclare("queue", true, false, false, new Dictionary<string, object>                {                    { "x-max-length", 10 },                    { "x-max-length-bytes", 2048}                });

RabbitMQ 参数们的Power “续”