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}
                });
时间: 2024-10-24 10:09:26

RabbitMQ 参数们的Power “续”的相关文章

RabbitMQ 声明Queue时的参数们的Power

参数们的Power 在声明队列的时候会有很多的参数 public static QueueDeclareOk QueueDeclare(this IModel model, string queue = "", bool durable = false, bool exclusive = true, bool autoDelete = true, IDictionary<string, object> arguments = null); queue:这没什么好说的,队列名

Python 函数的参数知识汇总

函数搞不熟,后边就晕头转向了,在此重新归纳一下廖大神的函数教程,加深记忆 一.函数的参数分为: 位置参数 1 def power(x): # x 就是power(x)的一个位置参数,我们调用power(x)必须传入一个参数x 2 return x * x 默认参数 1 def power(x, n=2): #修改后的power()函数有两个位置参数,调用函数时如果传入两个参数,会依次传给x,n; 2 s = 1 #如果仅仅传入一个参数的话,那么n=2就是一个默认参数,默认为2,这就是默认参数 3

函数参数、函数嵌套、作用域、名称空间

一.函数参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解. Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码. 1.位置参数 我们先写一个计算x2的函数: def power(x): return x *

python之函数的参数

定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解. Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码. 位置参数 我们先写一个计算x2的函数: def power(x): return x * x 对于powe

Day5:函数参数

一.函数参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解. Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码. 1.位置参数 我们先写一个计算x2的函数: def power(x): return x *

Day18:函数参数

一.函数参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解. Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码. 1.位置参数 我们先写一个计算x2的函数: def power(x): return x *

Python 默认参数

定义默认参数 定义函数的时候,还可以有默认参数. 例如Python自带的 int() 函数,其实就有两个参数,我们既可以传一个参数,又可以传两个参数: >>> int('123') 123 >>> int('123', 8) 83 int()函数的第二个参数是转换进制,如果不传,默认是十进制 (base=10),如果传了,就用传入的参数. 可见,函数的默认参数的作用是简化调用,你只需要把必须的参数传进去.但是在需要的时候,又可以传入额外的参数来覆盖默认参数值. 我们来定

python学习笔记 可变参数关键字参数**kw相关学习

在Python中可以定义可变参数,顾名思义,可变参数就是传入参数是可变的.可以是任意个,以一个简单的数学编程为例,计算 sum = a * a + b * b + .....z * z 函数定义可以如下: def getsum(num) : sum = 0 for n in num : sum = sum + n * n return sum 但是调用的时候必须定义一个元组或者列表.比如getsum([1,2,3]) 如果利用可变参数调用函数的方式可以变成这样的话就方便的多比如getsum(1,

python学习——函数的参数

定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解. Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码. 位置参数 我们先写一个计算x2的函数: def power(x): return x * x 对于powe