注:以下程序使用C#实现
上篇文章我们讲了如何定义RabbitMQ队列的最大长度:x-max-length。
本篇文章讲解如何定义队列的最大内存容量:x-max-length-bytes,当队列的内存达到指定字节时,将采用LRU算法对以往消息进行删除
通过字面意思我们可以大致知道,最大内容容量是以字节(byte)为单位进行计算的,下面我们用代码实现x-max-length-bytes,并进行验证
new Dictionary<stirng,object>{
{"x-max-length-bytes",1000}//这里我们为了测试方便,定义最大内容容量为1000字节
}
channel.QueueDeclare("mytest2",false,false,false,new Dictionary<string,object>{
{"x-max-length-bytes":1000}
});
channel.QueueBind("mytest2",string.Empty,"",null);
while(true){
var body=Encoding.UTF8.GetBytes("你好");//body是一个字符串,经测试,该字符串大小为6字节
channel.BasicPublish(string.Empty,"",null,body);
}
上面我们定义了一个队列mytest2,并定义队列的最大字节数为1000字节,然后不停往队列里面添加消息,每个消息长度为6个字节,我们可以预算得出,队列里面最多存放1000/6=166条消息,通过RabbitMQ管理界面查看,确实只能存放166条消息