topic主题交换器它根据在队列绑定的路由键和路由模式通配符匹配将消息路由到队列。

生产者在消息头中添加路由键并将其发送到主题交换器。 收到消息后,exchange尝试将路由键与绑定到它的所有队列的绑定路由模式匹配。 如果找到匹配,则将消息路由到其路由模式匹配的队列,如果未找到匹配,则忽略该消息

Routing key: 它是单词列表,由句点 (.) 分隔,例如“asia.china.beijing”

Routing Pattern: 它是在绑定队列时指定的模式,它是单词和通配符的列表,如*和#,由句点 (.) 分隔。 通配符的使用如下:

*: 用于匹配路由键中特定位置的单词,例如“asia.china.*”的路由模式将匹配第一个单词是asia而第二个单词的路由键单词是china,例如asia.china.beijing和asia.china.nanjing。

# :- 用于匹配零个或多个单词,例如asia.china.#的路由模式将匹配以asia.china开头的路由键,例如“asia.china”和 “亚洲.中国.北京”。

1.完整代码示例
  • 新增TopicExchangeConfig.java配置文件
@Configuration
public class TopicExchangeConfig { @Bean
public TopicExchange topic() {
return new TopicExchange("topic");
} private static class ConsumerConfig { @Bean
public Queue topicAutoDeleteQueue1() {
return new AnonymousQueue();
} @Bean
public Queue topicAutoDeleteQueue2() {
return new AnonymousQueue();
} @Bean
public Binding topicBinding1(TopicExchange topic, Queue topicAutoDeleteQueue1) {
return BindingBuilder.bind(topicAutoDeleteQueue1).to(topic).with("asia.china.*");
} @Bean
public Binding topicBinding2(TopicExchange topic, Queue topicAutoDeleteQueue2) {
return BindingBuilder.bind(topicAutoDeleteQueue2).to(topic).with("asia.china.#");
}
}
}
  • 新增生产者
@Component
public class TopicSender { private RabbitTemplate rabbitTemplate; public TopicSender(RabbitTemplate rabbitTemplate) {
this.rabbitTemplate = rabbitTemplate;
} public void send() {
rabbitTemplate.convertAndSend("topic", "asia.china.beijing", "asia.china.beijing");
rabbitTemplate.convertAndSend("topic", "asia.china.nanjing", "asia.china.nanjing");
rabbitTemplate.convertAndSend("topic", "asia.china", "asia.china");
}
}
  • 消费者
@Component
public class TopicReceiver { @RabbitListener(queues = "#{topicAutoDeleteQueue1.name}")
public void receive1(String in) {
System.out.println("临时队列1接收到消息:" + in);
} @RabbitListener(queues = "#{topicAutoDeleteQueue2.name}")
public void receive2(String in) {
System.out.println("临时队列2接收到消息:" + in);
}
}
  • 单元测试
@SpringBootTest
public class RabbitTest { @Autowired
private TopicSender topicSender; @Test
public void testTopicSender() {
topicSender.send();
}
}

可以看到对于#模式只有队列2接收到asia.china消息

欢迎关注公众号算法小生沈健的技术博客

7.RabbitMQ系列之topic主题交换器的更多相关文章

  1. RabbitMQ指南之五:主题交换器(Topic Exchange)

    在上一章中,我们完善了我们的日志系统,用direct交换器替换了fanout交换器,使得我们可以有选择性地接收消息.尽管如此,仍然还有限制:不能基于多个标准进行路由.在我们的日志系统中,我们可能不仅希 ...

  2. rabbitmq消息队列——"topic型交换器"

    在之前的章节中我们改进了我们的日志系统,我们使用direct型交换器代替了只能盲目广播消息的fanout型交换器,这使得我们可以有选择性地接收日志. 尽管使用direct型交换器改进了我们的日志系统, ...

  3. rabbitmq系列五 之主题交换机

    1.主题 在前面的例子中,我们对日志系统进行了改进.使用了direct交换机代替了fanout交换机,从只能盲目的广播消息改进为有可能选择性的接收日志. 尽管直接交换机能够改善我们的日志系统,但是它也 ...

  4. RabbitMQ系列教程之五:主题(Topic)(转载)

    RabbitMQ系列教程之五:主题(Topic) (本实例都是使用的Net的客户端,使用C#编写),说明,中文方括号[]表示名词. 在上一个教程中,我们改进了我们的日志记录系统. 没有使用只能够进行虚 ...

  5. RabbitMQ系列(三)RabbitMQ交换器Exchange介绍与实践

    RabbitMQ交换器Exchange介绍与实践 RabbitMQ系列文章 RabbitMQ在Ubuntu上的环境搭建 深入了解RabbitMQ工作原理及简单使用 RabbitMQ交换器Exchang ...

  6. RabbitMQ消息队列(八)-通过Topic主题模式分发消息(.Net Core版)

    前两章我们讲了RabbitMQ的direct模式和fanout模式,本章介绍topic主题模式的应用.如果对direct模式下通过routingkey来匹配消息的模式已经有一定了解那fanout也很好 ...

  7. (八)RabbitMQ消息队列-通过Topic主题模式分发消息

    原文:(八)RabbitMQ消息队列-通过Topic主题模式分发消息 前两章我们讲了RabbitMQ的direct模式和fanout模式,本章介绍topic主题模式的应用.如果对direct模式下通过 ...

  8. RabbitMQ系列教程之三:发布/订阅(Publish/Subscribe)(转载)

    RabbitMQ系列教程之三:发布/订阅(Publish/Subscribe) (本教程是使用Net客户端,也就是针对微软技术平台的) 在前一个教程中,我们创建了一个工作队列.工作队列背后的假设是每个 ...

  9. Go RabbitMQ(五)主题

    RabbitMQ topic 在之前我们将交换器的类型从fanout设置为direct后能够根据我们的选择获得响应的消息,虽然改良我们的消息日志系统,但是还有很多局限性,比如它不能基于多个标准进行路由 ...

随机推荐

  1. Multi-Party Threshold Private Set Intersection with Sublinear Communication-2021:解读

    记录阅读论文的笔记. 摘要 总结: (1)CRYPTO 2019:The Communication Complexity of Threshold Private Set Intersection- ...

  2. 项目操作案例丨西门子PLC通过网关连接ACS800变频器

    本案例控制对象为炉条机.以及蒸汽的控制以及现场数据参数的显示以及报警. PLC 选用西门子 CPU,通过 ET200 IO 模块控制现场设备并监控数据.变频器采用ABB ACS800变频器,将ABB ...

  3. GreatSQL FAQ

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 0. GreatSQL简介 1. GreatSQL的特色有哪些 2. GreatSQL在哪里可以下载 二进制包.RP ...

  4. 275. H 指数 II--Leetcode_二分

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/h-index-ii 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出处. 题目的大意是 ...

  5. GoogleTest环境配置以及应用

    1 GoogleTest源码编译: GoogleTest代码仓库URL: https://github.com/google/googletest.git 下载源代码: git clone --bra ...

  6. python数据精度问题

    一.python运算时精度问题: 1.运行时精度问题在Python中(其他语言中也存在这个问题,这是计算机采用二进制导致的),有时候由于二进制和十进制之间对应问题会导致数值的精度问题,比如无法用有限个 ...

  7. UE 实现镜头平移,旋转和缩放

    0x00 引 在数字孪生三维场景中,通过键盘和鼠标来控制镜头的移动,缩放是很常见的行为,也是很必要的行为,用户正是通过这些操作,达到对整个三维场景的观看和控制. 0x01 键盘控制镜头前后左右移动 通 ...

  8. Typora破解下载

    Typora破解下载 文章指路

  9. Kubernetes DevOps: Jenkins

    提到基于 Kubernete 的CI/CD,可以使用的工具有很多,比如 Jenkins.Gitlab CI 以及新兴的 drone 之类的,我们这里会使用大家最为熟悉的 Jenkins 来做 CI/C ...

  10. 讲讲 tcp_tw_recycle,tcp_tw_reuse

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485332&idx=1&sn=59823ce1 ...