5.mandatory和immediate参数

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的支持。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容