全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Spring Boot整合RabbitMQ实例(Topic模式)

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代码不那么样板化  # 多个  # 绑定  # 交换器  # 在这种  # 第一个  # 这样子  # 小编  # 图中  # 都是  # 是一个  # 在此  # 都能  # 是由  # 不多不少  # 信道  # 只会  # 要想  # 第二个  # 给大家  # 此类 


相关文章: 高防服务器租用如何选择配置与防御等级?  定制建站是什么?如何实现个性化需求?  建站之星如何快速更换网站模板?  如何获取开源自助建站系统免费下载链接?  如何做网站制作流程,*游戏网站怎么搭建?  *服务器网站为何频现安全漏洞?  如何挑选最适合建站的高性能VPS主机?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  制作网站的模板软件,网站怎么建设?  如何快速打造个性化非模板自助建站?  如何通过远程VPS快速搭建个人网站?  SQL查询语句优化的实用方法总结  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  如何快速搭建FTP站点实现文件共享?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  如何通过免费商城建站系统源码自定义网站主题与功能?  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  广东企业建站网站优化与SEO营销核心策略指南  MySQL查询结果复制到新表的方法(更新、插入)  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  江苏网站制作公司有哪些,江苏书法考级官方网站?  如何通过WDCP绑定主域名及创建子域名站点?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  如何实现建站之星域名转发设置?  如何在景安服务器上快速搭建个人网站?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  网站制作新手教程,新手建设一个网站需要注意些什么?  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何零基础在云服务器搭建WordPress站点?  建站之星如何配置系统实现高效建站?  名字制作网站免费,所有小说网站的名字?  建站上市公司网站建设方案与SEO优化服务定制指南  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  建站之星免费模板:自助建站系统与智能响应式一键生成  如何在阿里云域名上完成建站全流程?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  制作网站公司那家好,网络公司是做什么的?  微课制作网站有哪些,微课网怎么进?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  建站主机选虚拟主机还是云服务器更好?  设计网站制作公司有哪些,制作网页教程?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  在线教育网站制作平台,山西立德教育官网?  模具网站制作流程,如何找模具客户?  测试制作网站有哪些,测试性取向的权威测试或者网站?  如何制作网站标识牌,动态网站如何制作(教程)?  为什么Go需要go mod文件_Go go mod文件作用说明  企业网站制作公司网页,推荐几家专业的天津网站制作公司? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。