发送消息路由键名: rabbitmq_topic_routing_key_kh96.only发起请求:

文章插图
请求结果:队列One,Two,Three都接收到了信息,所以对应的消费者One,Two,Three都消费了信息;

文章插图
3.3.5.2 场景2:使用单词匹配路由键
发送消息路由键名: rabbitmq_topic_routing_key_kh96.abc发起请求:
文章插图
请求结果:队列Two,Three都接收到了信息,所以对应的消费者Two,Three都消费了信息;

文章插图
3.3.5.3 场景3:0 或多词匹配
发送消息路由键名: rabbitmq_topic_routing_key_kh96.abc.def发起请求:
文章插图
请求结果:只有队列Three接收到了信息,所以只有对应的消费者Three消费了信息;

文章插图
3.3.6 主题模式小结
- 当生产者发送消息到交换机,指定的路由键一般都是使用句点(.)作为分隔符,分割多个单词 。
- 比如:词1.词...
- 所谓单词:是由一个或多个单词组成,多个单词组成的路由键,就代表某种主题的关键信息,路由键长度最多不能超过256字节 。
- 匹配规则格式:* 或者 #
- *代表单个单词 。
- 比如 队列绑定主题交换机的 路由键:KH96.* ,代表发送消息的路由键是以KH96开头,后面只能跟一个单词,如:KH96.aaa,KH96.bbb等 。
- 再比如:绑定路由键为:KH96.*.KGC,代表发送消息路由键是以KH96开头,中间可以带一个单词,结尾,如:KH96.aa.KGC,KH96.bb.KGC 。
- #代表0或多个单词,比如 队列绑定主题交换机的 路由键:KH96.#,代表发送消息的路由键是以KH96开头,后面只能跟0个或者多个单词,如:KH96,KH96.aaa,KH96.aaa.bbb 。
- 再比如:绑定路由键为:KH96.#.KGC,代表发送消息路由键是以KH96开头,中间可以带一个或多个单词,结尾,如KH96.KGC,KH96.aa.KGC,KH96.aa.bb.KGC 。
- 备注:
- 如果主题交换机,队列绑定的路由键使用的不是模糊匹配符,主题交换机跟直连交换机一致 。
- 如果单独使用#,代表所有队列都可以收消息,主题交换机跟扇形交换机一致 。
- *代表单个单词 。
- 提醒:
- 主题模式下,队列绑定的路由键,是允许为多个的 。
- 如果路由键被更换,之前的路由键是不会删除,仍然会绑定到当前队列上 。
- 如果有多个路由键匹配,规则为:如果其中一个没有匹配到,会自动匹配其他路由键,如果需要删除历史路由键,需要在RabbitMQ控制台删除 。
- 主题模式下,队列绑定的路由键,是允许为多个的 。
# RabbitMQ配置spring:rabbitmq:# 打开发送消息确认配置publisher-confirms: true # 发送消息到交换机确认,默认falsepublisher-returns: true # 发送消息到队列确认,默认是false3.4.2 消息发送确认配置类- 触发机制
- ConfirmCallback 函数式接口中的唯一抽象方法 confirm : 是否有交换机都会触发;
- 标识:true,发送到交换机正常;
- 标识:false,发送到交换机失败,进行特殊处理;
- ReturnCallback 函数式接口中的唯一抽象方法 returnedMessage :交换机存在且队列不存在才会触发;
- ConfirmCallback 函数式接口中的唯一抽象方法 confirm : 是否有交换机都会触发;
