消息路由失败
消息路由失败的处理方式有以下两种:
- mandatory和immediate是channel.basicPublish方法中的两个参数,它们都有当消息传递过程中不可达目的地时将消息返回给生产者的功能。
- RabbitMQ提供的备份交换器(Altemate Exchange )可以将未能被交换器路由的消息(没有绑定队列或者没有匹配的绑定〉存储起来,而不用返回给客户端。
mandatory 参数
发送消息的时候,如下设置了mandatory,在没有这个mandatory参数的时候,默认是false
void basicPublish(String exchange, String routingKey, boolean mandatory, BasicProperties props, byte[] body);
当mandatory参数设为true时,交换器无法根据自身的类型和路由键找到一个符合条件的队列,那么RabbitMQ会调用Basic.Return命令将消息返回给生产者。当mandatory参数设置为false时,出现上述情形,则消息直接被丢弃(这是默认情况下)。那么生产者如何获取到没有被正确路由到合适队列的消息呢?这时候可以通过调用channel.addReturnListener来添加ReturnListener监听器实现。代码如下:
channe