注:以下程序使用C#实现
上篇文章我们讲了RabbitMQ如何设置队列的最大内容容量,本篇文章我们讲解arguments参数之dead-letter(死信)
RabbitMQ中的dead-letter,主要用来指定当一个消息被队列或者客户端丢弃之后,该如何处理这条消息,比如以前的文章我们讲过,队列的最大长度,当消息数量超过最大长度时,将丢弃一些消息,被丢弃的消息将无法被消费,如果使用dead-letter,我们可以指定当消息被丢弃之后,需要将消息重新发送到指定的队列
使用死信要用到两种参数:
- x-dead-letter-exchange
- x-dead-letter-routing-key
下面使用代码示例讲解如何配置死信参数
new Dictionary<stirng,object>{
{"x-max-length",1000},//队列最大长度为1000
{"x-dead-letter-exchange","myexchange"},//将丢弃的消息放到exchange中
{"x-dead-letter-routing-key","mydeadtest"}//放到exchange
}
channel.ExchangeDeclare("myexchange",ExchangeType.Direct, false,false,null);
channel.QueueDeclare("mydeadtest",false,false,false,null);
channel.QueueDeclare("mytest3",false,false,false,new Dictionary<string,object>{
{"x-max-length",1000},//这里我们为了测试方便,定义最大内容容量为1000字节
{"x-dead-letter-exchange","myexchange"},//将丢弃的消息放到exchange中
{"x-dead-letter-routing-key","mydeadtest"}//放到exchange
});
channel.QueueBind("deadTest", "myexchange", "mydeadtest", null);
channel.QueueBind("mytest3","myexchange","",null);
int i=0;
while(true){
i++;
var body=Encoding.UTF8.GetBytes("你好"+i);
channel.BasicPublish("myexchange","",null,body);
}
上面我们设置,当队列长度超出规定的最大长度1000时,就将丢弃的消息发送到myexchange中routingkey为mydeadtest的队列中,效果我们可以通过RabbitMQ管理界面查看