RabbitMQ--topic
Topic
类型的Exchange
与Direct
相比,都是可以根据RoutingKey
把消息路由到不同的队列。只不过Topic
类型Exchange
可以让队列在绑定Routing key
的时候使用通配符!Routingkey
一般都是有一个或多个单词组成,多个单词之间以”.”分割,例如:item.insert
通配符规则:
#
:匹配一个或多个词*
:匹配不多不少恰好1个词
举例:
item.#
:能够匹配item.spu.insert
或者item.spu
item.*
:只能匹配item.spu
解释:
- Queue1:绑定的是
china.#
,因此凡是以china.
开头的routing key
都会被匹配到。包括china.news和china.weather - Queue2:绑定的是
#.news
,因此凡是以.news
结尾的routing key
都会被匹配。包括china.news和japan.news
举例:
public_topic 消息生产者
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestMqTopic {@Autowiredprivate RabbitTemplate rabbitTemplate;@Testpublic void testTopic1(){//发送的目标交换机String exchange = "itcast.topic";String message="我王二天下无敌1";rabbitTemplate.convertAndSend(exchange,"china.RAP",message);}@Testpublic void testTopic2(){//发送的目标交换机String exchange = "itcast.topic";String message="我王二天下无敌2";rabbitTemplate.convertAndSend(exchange,"yangshi.news",message);}@Testpublic void testTopic3(){//发送的目标交换机String exchange = "object.json";Student stu = new Student("王二", 1, new String[]{"sing", "dance", "rap"});rabbitTemplate.convertAndSend(exchange,"china.json",stu);}
}
配置
spring:rabbitmq:host: 192.168.23.130port: 5672username: itcastpassword: 123321virtual-host: /
consumer_topic 消息消费者
@Component
public class SpringRabbitListener {//- Topic交换机接收的消息RoutingKey必须是多个单词,以 `**.**` 分割//- Topic交换机与队列绑定时的bindingKey可以指定通配符//- `#`:代表0个或多个词//- `*`:代表1个词@RabbitListener(bindings = @QueueBinding(value = @Queue("topicQueue1"),exchange = @Exchange(value = "itcast.topic",type = ExchangeTypes.TOPIC),key = {"china.#"}))public void listenerTopicQueue1(String msg){System.out.println("topicQueue1接收的消息为"+msg);}@RabbitListener(bindings = @QueueBinding(value = @Queue("topicQueue2"),exchange = @Exchange(value = "itcast.topic",type = ExchangeTypes.TOPIC),key = {"#.news"}))public void listenerTopicQueue2(String msg){System.out.println("topicQueue2接收的消息为"+msg);}@RabbitListener(bindings = @QueueBinding(value = @Queue("topicQueue3"),exchange = @Exchange(value = "object.json",type = ExchangeTypes.TOPIC),key = {"#.json"}))public void listenerTopicQueue3(Student msg){System.out.println("topicQueue3接收的对象为"+msg);}
}
启动类配置对象转化可在可视化界面查看
@SpringBootApplication
public class MqTopicApplication {public static void main(String[] args) {SpringApplication.run(MqTopicApplication.class);}//配置消息转换器@Beanpublic MessageConverter jsonMessageConverter(){return new Jackson2JsonMessageConverter();}
}
配置
spring:rabbitmq:host: 192.168.23.130port: 5672username: itcastpassword: 123321virtual-host: /
所需依赖
<!--AMQP依赖,包含RabbitMQ-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency><!--json转化依赖--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency>
父依赖
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.9.RELEASE</version><relativePath/></parent><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><!--AMQP依赖,包含RabbitMQ--><dependencies><!--json转化依赖--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--AMQP依赖,包含RabbitMQ--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><!--单元测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency></dependencies>
RabbitMQ--topic相关推荐
- rabbitmq+topic+java_译:5.RabbitMQ Java Client 之 Topics (主题)
我们使用的是direct(直接交换),而不是使用只能进行虚拟广播的 fanout(扇出交换),并且有可能选择性地接收日志. 虽然使用direct(直接交换)改进了我们的系统,但它仍然有局限性 - 它不 ...
- RabbitMq topic
目录 概述 代码 结果 概述 上篇direct必须是生产者发布消息指定的routingKey和消费者在队列绑定时指定的routingKey完全相等时才能匹配到队列上.topic与direct不同,可以 ...
- rabbitmq topic 收不到数据_RabbitMQ和Kafka到底怎么选?
作者:haolujunhttp://cnblogs.com/haolujun/p/9632835.html 前言 开源社区有好多优秀的队列中间件,比如RabbitMQ和Kafka,每个队列都貌似有其特 ...
- RabbitMQ Topic exchange
Topic exchange topic与之前的每个类型都不同(ps:废话每个都是不同的).Topic解决了我们另一个需求.举个例子,有一个做资讯的公司,他们会收集各种科技公司的动态并且第一时间转发出 ...
- RabbitMQ Topic交换机(生产者)
/* * 声明主题交换机及相关队列 * 消费者C1 * */ public class ReceiveLogsTopic01 {//交换机名称public static final String EX ...
- RabbitMQ Topic交换机的作用
介绍 发送到类型是topic交换机的消息的routing_key不能随意写,必须满足一定的要求,它必须是一个单词列表,以点号分隔开.这些单词可以是任意单词,比如说: "stock.usd.n ...
- RabbitMQ Topic模式
一个生产者,一个交换机,两个队列,两个消费者 生产者创建Topic的exchange并且绑定到队列中,这次绑定可以通过*和#关键字,对指定RoutingKey内容,编写时注意格式 xxx.xxx.xx ...
- RabbitMQ Topic交换机(结果成功)
public class EmitLogTopic {//交换机的名称public static final String EXCHANGE_NAME = "topic_logs" ...
- RabbitMq(七) Topic模式介绍及代码示例
概述: 在上一文章中我们介绍了路由模式(Routing),routing模式是不同的消息队列绑定了不同的路由key,但是我们看出路由key为固定的字符串标记.而本章中的Topic模式则为在路由模式下, ...
- Springboot整合RabbitMQ,包含direct,topic,fanout三种模式的整合
一 RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿 ...
最新文章
- 百度SLG拿下前锤子科技CTO钱晨,还要合并小鱼在家? | 极客头条
- 听说这是写毕业论文的你?
- js目标时间与当前时间差转换年月日天数
- 你真的了解NSNotificationCenter吗?
- php根据字符串生成变量名,PHP 自定义字符串中的变量名解析
- MapReduce-计数器
- URL(统一资源定位符)
- 各种光源(灯)的光谱
- oracle count over partition by,over (Partition by...) of oracle
- github-新建文件夹
- 解决Element的 InfiniteScroll 无限滚动组件报错
- 拓端tecdat|R语言分位数回归预测筛选有上升潜力的股票
- Silverlight 4 帮助文件例子的连接
- tf hub bigGan 猫变狗
- python爬虫用AI技术-破解企业工商数据抓取+网络爬虫+网站数据采集+数据抓取遇到的三大问题
- Unity开发常用工具
- 【Hexo】hexo在文章中添加图片
- 该填志愿了,国内大学计算机专业哪家强?
- Python从入门到实践第9章课后作业
- 小程序云开发实现微信支付完整代码