mandatory和immediate是channel.basicPublish方法中的两个参数,他们都有当消息传递过程中不可达目的地时将消息返回给生产者的功能。RabbitMQ提供的备份交换器(Alternate Exchange)可以将未能被交换器路由的消息(没有绑定队列或者没有匹配的绑定)存储起来,而不是返回给客户端。

mandatory参数

mandatory为true时,交换器无法根据自身的类型和路由键找打一个符合条件的队列,那么RabbitMQ会调用Basic.Return命令将消息返回给生产者。mandatory为false时,出现上述情形,消息直接被丢弃。
生产者通过调用channel.addReturnListener来添加ReturnListener监听器来实现

channel.basicPublish(EXCHANGE_NAME,“”,true,MessageProperties.PERSISTENT_TEXT_PLAIN,“mandatory test”.getBytes());
channel.addReturnListener(new ReturnListener(){public void handleReturn(int replyCode,String replyText,String exchange,String routingKey,AMQP.BasicProperties basicProperties,byte[] body) throws IOException{String message = new String(body);System.out.println("Basic.Return返回的结果是:" + message);}
})

immediate参数

当immediate参数为true时,如果交换器在将消息路由到队列时发现队列上并不存在任何消费者,那么这条消息将不会存入队列。当与路由键匹配的所有队列都没有消费者时,该消息会通过Basic.Return返回至生产者。
RabbitMQ3.0版开始去掉了对immediate参数的支持

备份交换器

Alternate Exchange,简称AE。生产者在发送消息的时候如果不设置mandatory参数,那么消息在未被路由的情况下将会丢失;如果设置了mandatory参数,需要添加ReturnListener的编程逻辑,生产者的代码将变得复杂。如果不想复杂化生产者的编程逻辑,又不想消息丢失,那么可以使用备份交换器,这样可以将未被路由的消息存储在RabbitMQ中,再在需要的时候处理这些消息。
可以通过在声明交换器(调用cannel.exchangeDeclare方法)的时候添加alternate-exchange参数来实现,也可以通过策略(Policy)的方式实现。如果两者同时使用,则前者的优先级更高,会覆盖掉Policy设置。

Map<String,Object> args = new HashMap<String,Object>();
args.put("altername-exchange","myAe");
channel.exchangeDeclare("normalExchange","direct",true,false,args);
channel.exchangeDeclare("myAe","fanout",true,false,false,null);
channel.queueDeclare("normalQueue",true,false,false,null);
channel.queueBind("normalQueue","normalExchange","normalKey");
channel.queueDeclare("unroutedQueue",true,false,false,null);
channel.queueBind("unroutedQueue","myAe","");

上面的代码声明了两个交换器normalExchange和myAe,分别绑定了normalQueue和unroutedQueue这两个队列,同时将myAe设置为normalExchange的备份交换器,注意myAe的交换器类型为fanout。

mandatory和immediate相关推荐

  1. RabbitMQ中的消息不可达returnlistener和mandatory的使用

    return listener 用于处理一些不可路由的消息.     我们的消息生产者,通过指定一个exchange和routingkey,把消息送达到某一个队列中,然后我们的消费者监听队列,进行消费 ...

  2. 云笔记项目-Spring事务学习-传播MANDATORY

    接下来测试事务传播属性MANDATORY Service层 所有Service层实现类都设置事务传播属性为MANDATORY. LayerT层代码 1 package LayerT; 2 3 impo ...

  3. RabbitMQ(二):mandatory标志的作用

    本文转自:http://m.blog.csdn.net/article/details?id=54311277 在生产者通过channel的basicPublish方法发布消息时,通常有几个参数需要设 ...

  4. mandatory oracle 字段,Oracle 数据库需要在2019年April之前Mandatory升级的说明

    在以下我简要引用一下Oracle官方的声明,提醒大家务必认真分析,制定必要的应对策略. Oracle Databases Need to be Patched to a Minimum Patchse ...

  5. RabbitMQ之mandatory和immediate

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  6. 让product description 成为mandatory field

    Created by Jerry Wang, last modified on Apr 16, 2014 如果需要强制让product description在product creation时成为m ...

  7. 【RabbitMQ】8、RabbitMQ之mandatory和immediate

    1. 概述 mandatory和immediate是AMQP协议中basic.publish方法中的两个标识位,它们都有当消息传递过程中不可达目的地时将消息返回给生产者的功能.对于刚开始接触Rabbi ...

  8. This computer doesn’t have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory“!

    @ 启动Docker Quickstart Terminal出现错误: This computer doesn't have VT-X/AMD-v enabled. Enabling it in th ...

  9. RabbitMQ(四):mandatory、immediate、备份交换器

    mandatory和immediate是basic.publish方法中的两个参数,他们都有当消息传递不可抵达队列时将消息返回给生产者的能力.备份交换器则可以将未被交换器路由的消息储存起来.不返回给生 ...

  10. (11)RabbitMQ的mandatory、immediate和ReturnListener

    上一节介绍了RabbitMQ的生产者确认机制,这节继续介绍RabbitMQ的生产者确认相关的高级特性:mandatory.immediate.ReturnListener. 概述 上节介绍了Rabbi ...

最新文章

  1. three.js(六) 地形法向量生成
  2. padavan支持惠普打印服务器,[分享]Padavan打印机共享,电脑和手机上添加,亲测通过!...
  3. java actor akka_Actor 模型及Akka简介
  4. 关于牛客网运行超时的原因分析
  5. ColorStateList 使用详解
  6. hdu 1027 输出第m个全排列(next_permutation)
  7. php刷数据库数据库,php数据库操作种
  8. 如何进行大数据分析与处理
  9. 【工具】支付宝免费卡校验接口调用及常用银行简称整理
  10. Global Tracking Transformers 详细解读
  11. nodejs event emitter
  12. 如何批量转换xls文件为xlsx?
  13. JavaScript中deferred对象浅析
  14. 三、入门Python第三课
  15. 台湾国立大学郭彦甫Matlab教程笔记(5)structured programming
  16. 使用lombok编写优雅的Bean对象
  17. 【软件工程】-- 期末考试题含答案(二)(考前必看、看完不挂科)
  18. 【统计学】一篇文章读懂stata相关性系数矩阵输出 加星号 (*)显著水平 学术论文
  19. 时间序列分析|异常值检测
  20. Java实现数据大小转换(B-KB-MB-GB)

热门文章

  1. 中国大学MOOC政府会计实务题库及答案
  2. websocket例子
  3. 初中计算机课的学情分析,初中信息技术教学计划范文3篇
  4. js实现点气球小游戏
  5. 提高访问量,我用魔盒
  6. 【Edraw Max教程】如何有趣的创建梦幻般的思维导图
  7. BuildAdmin后台管理系统入门分析:01
  8. 一张金融IC卡的交易流程(二)-----基本测试环境及借贷记交易流程(银联,交通部均为此流程)
  9. 苹果7显示无法接通激活服务器,打电话时,显示对方手机暂时无法接通是什么原因?答案其实很简单...
  10. 系统servlet、request知识付费(List/Map/Set)小程序开发