[MQ] SpringBoot使用扇型(广播)交换机/主题交换机

news2024/10/6 14:24:02

✨✨个人主页:沫洺的主页

📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 

                           📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专栏

                           📖Docker专栏📖Reids专栏📖MQ专栏📖SpringCloud专栏     

💖💖如果文章对你有所帮助请留下三连✨✨

🙈SpringBoot使用扇型(广播)交换机(Fanout Exchange)

消费者

不需要routing key

扇型交换机在接收到消息后,会直接转发到绑定到它上面的所有队列。

@Component
public class FanoutConsumer {
    private static  final  String ENAME = "211-FanoutExchage-01";
    private static  final  String QNAME1 = "211-FanoutQueue-11";
    private static  final  String QNAME2 = "211-FanoutQueue-12";
    //定义一个交换机
    @Bean
    public FanoutExchange fanoutExchange(){
        return new FanoutExchange(ENAME, true, false);
    }
    //定义一个队列
    @Bean
    public Queue fanoutQueue1(){
        return QueueBuilder.durable(QNAME1).build();
    }
    //定义一个队列
    @Bean
    public Queue fanoutQueue2(){
        return QueueBuilder.durable(QNAME2).build();
    }
    //创建队列和交换机的绑定关系
    @Bean
    public Binding binding1(){
        return BindingBuilder.bind(fanoutQueue1()).to(fanoutExchange());
    }
    //创建队列和交换机的绑定关系
    @Bean
    public Binding binding2(){
        return BindingBuilder.bind(fanoutQueue2()).to(fanoutExchange());
    }

    @RabbitHandler
    @RabbitListener(queues =QNAME1)
    public void process1(UserRegisterOk userRegisterOk){
        System.out.println("消费者1收到:"+userRegisterOk.getName()+","+userRegisterOk.getPhone());
    }
    @RabbitHandler
    @RabbitListener(queues =QNAME2)
    public void process2(UserRegisterOk userRegisterOk){
        System.out.println("消费者2收到:"+userRegisterOk.getName()+","+userRegisterOk.getPhone());
    }
}

生产者

@Component
public class FanoutProducer {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void sendMessage(){
        UserRegisterOk userRegisterOk = UserRegisterOk.builder().name("张三").phone("123456").build();
        //要将对象序列化,转成字符串,使用消息转换器MessageConverter
        rabbitTemplate.convertAndSend("211-FanoutExchage-01","",userRegisterOk);
        System.out.println("生产者生产-->张三注册成功");
    }

}

启动类

@SpringBootApplication
public class App1 {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(App1.class, args);
        FanoutProducer producer = context.getBean(FanoutProducer.class);
        producer.sendMessage();
    }

}

🙉SpringBoot使用主题交换机(Topic Exchange )

消费者

路由键和绑定键之间是有规则的

  • * 代表两点之间一个占位单词
  • # 代表后面所有,匹配所有
@Component
public class TopicConsumer {
    private static  final  String ENAME = "211-TopicExchage-01";
    private static  final  String QNAME1 = "211-TopicQueue-刘亦菲";
    private static  final  String QNAME2 = "211-TopicQueue-关晓彤";
    private static  final  String QNAME3 = "211-TopicQueue-邓紫棋";
    //定义一个交换机
    @Bean
    public TopicExchange topicExchange(){
        return new TopicExchange(ENAME, true, false);
    }
    //定义一个队列
    @Bean
    public Queue topicQueue1(){
        return QueueBuilder.durable(QNAME1).build();
    }
    //定义一个队列
    @Bean
    public Queue topicQueue2(){
        return QueueBuilder.durable(QNAME2).build();
    }
    //定义一个队列
    @Bean
    public Queue topicQueue3(){
        return QueueBuilder.durable(QNAME3).build();
    }
    //创建队列和交换机的绑定关系
    @Bean
    public Binding binding1(){
        return BindingBuilder.bind(topicQueue1()).to(topicExchange()).with("1.9.*");
    }
    //创建队列和交换机的绑定关系
    @Bean
    public Binding binding2(){
        return BindingBuilder.bind(topicQueue2()).to(topicExchange()).with("1.8.*");
    }
    //创建队列和交换机的绑定关系
    @Bean
    public Binding binding3(){
        return BindingBuilder.bind(topicQueue3()).to(topicExchange()).with("1.#");
    }
    //三个消费者
    @RabbitHandler
    @RabbitListener(queues =QNAME1)
    public void process1(UserRegisterOk userRegisterOk){
        System.out.println("刘亦菲收到:"+userRegisterOk.getName()+","+userRegisterOk.getHeight());
    }
    @RabbitHandler
    @RabbitListener(queues =QNAME2)
    public void process2(UserRegisterOk userRegisterOk){
        System.out.println("关晓彤收到:"+userRegisterOk.getName()+","+userRegisterOk.getHeight());
    }
    @RabbitHandler
    @RabbitListener(queues =QNAME3)
    public void process3(UserRegisterOk userRegisterOk){
        System.out.println("邓紫棋收到:"+userRegisterOk.getName()+","+userRegisterOk.getHeight());
    }
}

生产者

@Component
public class TopicProducer {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void sendMessage(){
        UserRegisterOk userRegisterOk = UserRegisterOk.builder().name("moming").phone("123456").height("1.8.5").build();
        //要将对象序列化,转成字符串,使用消息转换器MessageConverter
        rabbitTemplate.convertAndSend("211-TopicExchage-01",userRegisterOk.getHeight(),userRegisterOk);
        System.out.println("生产者生产-->moming");
    }

}

启动类 

@SpringBootApplication
public class App2 {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(App2.class, args);
        TopicProducer producer = context.getBean(TopicProducer.class);
        producer.sendMessage();
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/20254.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

刷式过滤器 不锈钢全自动刷式过滤器

原理概述 当水从进水口进入过滤器滤筒内部,杂质被拦截在过滤筒内壁,过滤后的干净水从出水口流出,当滤筒内壁的杂质越积越多时,自清洗过滤器进出口的压差达到预设值、达到清洗时间或手动预制时,过滤器将开始自清洗过程…

Feng Office 3.7.0.5 - 文件上传

Feng Office 3.7.0.5 - 文件上传 POST /ck_upload_handler.php HTTP/1.1 Host: www.baidu1.com Content-Length: 213 Cache-Control: max-age0 Upgrade-Insecure-Requests: 1 Origin: http://www.baidu1.com Content-Type: multipart/form-data; boundary----WebKitFormBoundar…

Linux基本指令2——时间相关

Linux内核:Centos 7.6 64位 date指令默认的date不适合阅读date 指定格式显示时间: date %Y:%m:%ddate 用法:date [OPTION]... [FORMAT]在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记&#…

AlexNet学习笔记

AlexNet 概述 AlexNet是由2012年ImageNet竞赛参赛者Hinton和他的学生Alex Krizhevsky设计的。 创新点 非线性激活函数ReLU 选取了非线性非饱和的relu函数,ReLU函数的表达式为F(x)max(0,z)。若输入小于0,那么输出为0;若输入大于0&#xff…

内蒙古海天公司企业网的规划与设计

目 录 摘要 I ABSTRACT II 目 录 III 第一章 引 言 - 1 - 第二章 需求分析 - 3 - 2.1 背景分析 - 3 - 2.2 应用需求分析 - 3 - 2.2.1 内蒙古海天公司网的管理策略 - 3 - 2.2.2 网络中服务器简介 - 4 - 2.2.3 操作系统的选择…- 5 - 2.3 安全需求 - 5 - 2.4 网络扩展性需求 - 5 …

JVM 一张图带你了解内存分配过程 搞懂逃逸分析|标量替换|指针碰撞|空闲列表|TLAB

面试题 在栈上分配对象,使用标量替换的目的是什么? 内存分配过程 逃逸分析 如何确定对象是否在栈上进行分配,当然得通过逃逸分析了。 逃逸分析是什么意思呢?我们直接看两段代码 代码1: public Student get(){Student student …

CEAC之《企业信息管理》2

👨‍💻个人主页:微微的猪食小窝 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 微微的猪食小窝 原创 收录于专栏 【CEAC证书】 1在每个文本框、组合框和列表框的属性表中,都可以找到3个属性,分别…

30.nacos做注册中心入门实例(springcloud)

一、新建nacos-client-a 1.因为官方的springboot没有集成nacos的依赖,所以不再使用springboot的官方下载依赖地址 2. 因为我的idea是2019版本,更改了springboot下载路径后,不会自动更新,第一次选中依赖时,仍然时sprin…

回溯算法(回溯搜索法)

回溯是递归的副产品,只要有递归就会有回溯。 回溯算法,不是一个高效的算法,纯暴力算法,实际上是递归算法的一部分,最多再剪枝⼀下。 回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案&a…

Mac无法打开CORE Keygen

背景 显示如下图,无法打开CORE Keygen,不要方。一个神器即可解决。 方案-使用UPX: (1)先安装upx (什么,你说你没有brew???看看这篇文章 Mac安装brew_Hero.Lin的博…

一篇文章彻底理解 HDFS 的安全模式

一篇文章彻底理解 HDFS 的安全模式 1 什么是 HDFS 的安全模式 Hdfs 的安全模式,即 HDFS safe mode, 是 HDFS 文件系统的一种特殊状态,在该状态下,hdfs 文件系统只接受读数据请求,而不接受删除、修改等变更请求,当然也…

【攻破css系列——第九天】常规流

文章目录1. 常规流2. 常规流布局2.1 定义2.2 包含块2.3 块盒2.3.1 每个块盒的总宽度,必须等于包含块的宽度2.3.2 每个块盒垂直方向上的auto值2.3.3 百分比取值2.3.4 上下外边距合并(margin塌陷)2.4 行盒2.4.1 盒子沿着内容延伸2.4.2 宽高不可…

Redis基础入门教程 - 概览

Redis基础教程 欢迎加好友一起讨论问题 知识地图:Redis概述与安装https://blog.csdn.net/lili40342/article/details/127852124Redis的5大数据类型https://blog.csdn.net/lili40342/article/details/127897689Redis的发布和订阅https://blog.csdn.net/lili40342/art…

C++模拟OpenGL库——图片处理及纹理系统(四):UV纹理坐标

目录 引入UV纹理坐标及三角形绘制设置 纹理过滤 引入UV纹理坐标及三角形绘制设置 上图其实不是很直观。 UV坐标要解决的问题就是: 假设我有一张500500的纹理图片; 我要把它映射到一张200200的图片中; 这个问题要怎么去解决。 这里提出…

【附源码】Python计算机毕业设计网络考试系统设计

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

百度第三季度财报前瞻:财务业绩预计将超预期

来源:猛兽财经 作者:猛兽财经 百度(BIDU)此前于2022年11月8日发布了一份媒体新闻稿,强调其将在2022年11月22日公布其第三季度财报。 分析师预计百度第三季度的财务业绩将有所改善 根据卖方分析师对百度的一致财务预测&…

基于GPU的kokkos加速安装

基于GPU的kokkos加速安装基于GPU的kokkos加速安装1. 安装lammps2. 安装cmake3. cmake相关文件修改4. cmake编译5. 测试安装lammps及相关库的步骤网上很多,这里介绍在前期步骤准备好的情况下,如果in文件中包含反应力 场以及需要通过voronoi库计算应力&…

【文本分类】《融合知识感知与双重注意力的短文本分类模型》

阅读摘要:   本文主要提出基于TextRCNN模型使用知识图谱、双重注意力感知来改进短文本分类,最终提高了精度。 参考文献:   [1] 融合知识感知与双重注意力的短文本分类模型 参考论文信息 (很牛) 论文名称&#xff1…

算法课实验报告解析(4班供参考)

有两个题1.第一题2.第二题1.第一题 &#x1f60b;题目描述&#xff1a; 给定一个整数数组A(ao&#xff0c;a1&#xff0c;…,an-1),若岗且ai>aj&#xff0c;则<ai.aj>就为一个逆序对。例如数组&#xff08;3,1,4,5,2,&#xff09;的逆序对有<3,1>、< 3,2>…

C++STL-string类的实现(上)

在上一篇中&#xff0c;我们知道了string类的一些基本使用&#xff0c;这一篇我们就说一下string类的具体的底层实现。 文章目录1.预前准备1.1 初步的构造和析构1.2 下标的运算符重载2. 深浅拷贝2.1 拷贝构造函数2.2 运算符重载3. 完善前面写的函数3.1 完善构造函数和析构函数…