1.Topic交换器介绍

Topic Exchange 转发消息主要是根据通配符。 在这种交换机下,队列和交换机的绑定会定义一种路由模式,那么,通配符就要在这种路由模式和路由键之间匹配后交换机才能转发消息。
在这种交换机模式下:
路由键必须是一串字符,用句号(.) 隔开,比如说 agreements.us,或者 agreements.eu.stockholm 等。
路由模式必须包含一个 星号(*),主要用于匹配路由键指定位置的一个单词,比如说,一个路由模式是这样子:agreements..b.*,那么就只能匹配路由键是这样子的:第一个单词是 agreements,第四个单词是 b。 井号(#)就表示相当于一个或者多个单词,例如一个匹配模式是agreements.eu.berlin.#,那么,以agreements.eu.berlin开头的路由键都是可以的。
具体代码发送的时候还是一样,第一个参数表示交换机,第二个参数表示routing key,第三个参数即消息。如下:
rabbitTemplate.convertAndSend("testTopicExchange","key1.a.c.key2", " this is RabbitMQ!");
topic 和 direct 类似, 只是匹配上支持了"模式", 在"点分"的 routing_key 形式中, 可以使用两个通配符:
*表示一个词.
#表示零个或多个词.
如上图所示:此类交换器使得来自不同的源头的消息可以到达一个对列,其实说的更明白一点就是模糊匹配的意思,例如:上图中红色对列的routekey为usa.#,#代表匹配任意字符,但是要想消息能到达此对列,usa.必须匹配后面的#好可以随意。图中usa.news,usa.weather都能找到红色队列,符号“#”匹配一个或多个词,符号“”匹配不多不少一个词。因此“usa.#”能够匹配到“usa.news.XXX”,但是“usa.” 只会匹配到“usa.XXX”。
注:交换器说到底是一个名称与队列绑定的列表。当消息发布到交换器时,实际上是由你所连接的信道,将消息路由键同交换器上绑定的列表进行比较,最后路由消息
2.示例代码
1).RabbitMQ的Topic的bean配置
RabbitTopic.java类:
package com.example.rabbitmqtopic;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitTopic {
final static String message = "topic.message";
final static String messages = "topic.messages";
//创建队列
@Bean
public Queue queueMessage() {
return new Queue(RabbitTopic.message);
}
//创建队列
@Bean
public Queue queueMessages() {
return new Queue(RabbitTopic.messages);
}
//创建交换器
@Bean
TopicExchange exchange() {
return new TopicExchange("topicExchange");
}
//对列绑定并关联到ROUTINGKEY
@Bean
Binding bindingExchangeMessage(Queue queueMessage, TopicExchange exchange) {
return BindingBuilder.bind(queueMessage).to(exchange).with("topic.message");
}
//对列绑定并关联到ROUTINGKEY
@Bean
Binding bindingExchangeMessages(Queue queueMessages, TopicExchange exchange) {
return BindingBuilder.bind(queueMessages).to(exchange).with("topic.#");//*表示一个词,#表示零个或多个词
}
}
2).消息生产者生产消息
TopicSender.java类:
package com.example.rabbitmqtopic.rabbitmq;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class TopicSender {
@Autowired
private AmqpTemplate rabbitTemplate;
public void send() {
String context = "hi, i am message all";
System.out.println("Sender : " + context);
this.rabbitTemplate.convertAndSend("topicExchange", "topic.1", context);
}
public void send1() {
String context = "hi, i am message 1";
System.out.println("Sender : " + context);
this.rabbitTemplate.convertAndSend("topicExchange", "topic.message", context);
}
public void send2() {
String context = "hi, i am messages 2";
System.out.println("Sender : " + context);
this.rabbitTemplate.convertAndSend("topicExchange", "topic.messages", context);
}
}
3).消息消费者
TopicReceiver.java类:
package com.example.rabbitmqtopic.rabbitmq;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
@RabbitListener(queues = "topic.message")
public class TopicReceiver {
@RabbitHandler
public void process(String message) {
System.out.println("Topic Receiver1 : " + message);
}
}
TopicReceiver2.java类:
package com.example.rabbitmqtopic.rabbitmq;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
@RabbitListener(queues = "topic.messages")
public class TopicReceiver2 {
@RabbitHandler
public void process(String message) {
System.out.println("Topic Receiver2 : " + message);
}
}
4).测试
RabbitMQTopicTest.java类:
package com.example.rabbitmqtopic.rabbitmq;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class RabbitMQTopicTest {
@Autowired
private TopicSender sender;
@Test
public void topic() throws Exception {
sender.send();
}
@Test
public void topic1() throws Exception {
sender.send1();
}
@Test
public void topic2() throws Exception {
sender.send2();
}
}
以上所述是小编给大家介绍的Spring Boot整合RabbitMQ实例(Topic模式),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# springboot整合
# rabbitmq
# kafka监控获取指定topic的消息总量示例
# kafka-python 获取topic lag值方式
# kafka 启动报错 missingTopicsFatal is true的解决
# 详解Springboot整合ActiveMQ(Queue和Topic两种模式)
# spring boot使用RabbitMQ实现topic 主题
# TOPI如何使TVM代码不那么样板化
# 多个
# 绑定
# 交换器
# 在这种
# 第一个
# 这样子
# 小编
# 图中
# 都是
# 是一个
# 在此
# 都能
# 是由
# 不多不少
# 信道
# 只会
# 要想
# 第二个
# 给大家
# 此类
相关文章:
学校为何禁止电信移动建设网站?
如何用低价快速搭建高质量网站?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
建站之星安装后如何自定义网站颜色与字体?
建站之星在线版空间:自助建站+智能模板一键生成方案
建站主机CVM配置优化、SEO策略与性能提升指南
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
如何使用Golang table-driven基准测试_多组数据测量函数效率
ppt制作免费网站有哪些,ppt模板免费下载网站?
如何快速搭建响应式可视化网站?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
招商网站制作流程,网站招商广告语?
javascript基本数据类型及类型检测常用方法小结
制作企业网站建设方案,怎样建设一个公司网站?
建站主机SSH密钥生成步骤及常见问题解答?
制作门户网站的参考文献在哪,小说网站怎么建立?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
网站制作壁纸教程视频,电脑壁纸网站?
如何零基础开发自助建站系统?完整教程解析
教学论文网站制作软件有哪些,写论文用什么软件
?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
如何通过网站建站时间优化SEO与用户体验?
如何配置FTP站点权限与安全设置?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
网站制作报价单模板图片,小松挖机官方网站报价?
太原网站制作公司有哪些,网约车营运证查询官网?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
文字头像制作网站推荐软件,醒图能自动配文字吗?
建站上传速度慢?如何优化加速网站加载效率?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
PHP正则匹配日期和时间(时间戳转换)的实例代码
西安专业网站制作公司有哪些,陕西省建行官方网站?
网站制作免费,什么网站能看正片电影?
广州商城建站系统开发成本与周期如何控制?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
网站代码制作软件有哪些,如何生成自己网站的代码?
如何在IIS中配置站点IP、端口及主机头?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
已有域名和空间,如何快速搭建网站?
建站之星后台管理系统如何操作?
建站之星价格显示格式升级,你的预算足够吗?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
网站制作需要会哪些技术,建立一个网站要花费多少?
网页设计与网站制作内容,怎样注册网站?
深圳网站制作案例,网页的相关名词有哪些?
三星网站视频制作教程下载,三星w23网页如何全屏?
大型企业网站制作流程,做网站需要注册公司吗?
*请认真填写需求信息,我们会在24小时内与您取得联系。