5.mandatory和immediate参数
2019-05-28 本文已影响0人
12点前睡觉hhh
void basicPublish(String exchange, String routingKey, boolean mandatory, boolean immediate, BasicProperties props, byte[] body)
throws IOException;
1.相同点
1.mandatory和immediate都是basicPublish方法中的两个参数。
2.都是boolean类型。
3.它们都有当消息传递过程中不可达目的地时将消息返回给生产者的功能。
2.不同点
1.当manadotory参数设置为true时,交换器无法根据自身的类型和路由键找到一个符合条件的队列,那么RabbitMQ会调用basicReturn命令将消息返回给生产者。当设置为false出现上述情况,则直接丢弃。
生产者可以通过channel.addReturnListener方法监听返回给生产者的消息
使用实例如下:
channel.addReturnListener(new ReturnListener() {
@Override
public void handleReturn(int replyCode, String replyText, String exchange, String routingKey, AMQP.BasicProperties properties, byte[] body) throws IOException {
String returnMsg=new String(body);
System.out.println(body);
}
});
2.当immediate参数设置为true时,如果交换器在将消息发送到队列时发现队列上并不存在任何消费者,那么这条消息不会存入队列;当与路由键匹配的所有队列队列都没有消费者时,通过basicReturn返回给生产者。
RabbitMQ 3.0版本开始去掉了对immediate的支持。