SpringBoot整合RabbitMQ,三种交换机类型示例

SpringBoot整合RabbitMQ,三种交换机类型示例

1、流程概括

在这里插入图片描述

2、引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>

3、配置RabbitMQ连接

在application.properties或application.yml中配置RabbitMQ服务器的连接参数:

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtual-host=/

4、不同交换机模式下的使用

4.1、DirectExchange(直连交换机)

消费者


import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class DirectConsumer {//注册一个队列@Bean  //启动多次为什么不报错?启动的时候,它会根据这个名称Direct_Q01先去查找有没有这个队列,如果有什么都不做,如果没有创建一个新的public Queue queue(){return   QueueBuilder.durable("Direct_Q01").maxLength(100).build();}//注册交换机@Beanpublic DirectExchange exchange(){//1.启动的时候,它会根据这个名称Direct_E01先去查找有没有这个交换机,如果有什么都不做,如果没有创建一个新的return  ExchangeBuilder.directExchange("Direct_E01").build();}//绑定交换机与队列关系@Beanpublic Binding binding(Queue queue,DirectExchange exchange){return BindingBuilder.bind(queue).to(exchange).with("RK01");}//启动一个消费者@RabbitListener(queues = "Direct_Q01")public void receiveMessage(String msg){System.out.println("收到消息:"+msg);}}

生产者

@Service
public class DirectProvider {@Autowiredprivate RabbitTemplate rabbitTemplate;public void send(Object message) {rabbitTemplate.convertAndSend("Direct_E01", "RK01", message);}
}

测试

@SpringBootTest
class TestApp {@Autowired
private DirectProvider directProvider;@Test
void test() throws IOException {for(int i = 0; i < 10; i++){directProvider.send("你好呀"+i);System.out.println("发送成功"+i);ThreadUtil.safeSleep(1000);}System.in.read();}}

一个交换机对多个队列的特点:

在这里插入图片描述

一个队列对多个消费者特点:

在这里插入图片描述

4.2、FanoutExchange(扇形/广播交换机)

消费者

/** Copyright (c) 2020, 2024, fpl1116.cn All rights reserved.**/
package com.fpl.consumers;import com.fpl.model.OrderingOk;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** <p>Project: spring-rabbitmq - FanoutConsumer</p>* <p>Powered by fpl1116 On 2024-04-08 11:35:22</p>* <p>描述:<p>* @author penglei* @version 1.0* @since 1.8*/
@Configuration
public class FanoutConsumer {//注册一个队列@Beanpublic Queue fanoutQueue1(){return   QueueBuilder.durable("Fanout_Q01").build();}//注册交换机@Beanpublic FanoutExchange fanoutExchange(){//1.启动的时候,它会根据这个名称Direct_E01先去查找有没有这个交换机,如果有什么都不做,如果没有创建一个新的return  ExchangeBuilder.fanoutExchange("Fanout_E01").build();}@Bean //交换机与队列关系public Binding fanoutBinding1(Queue fanoutQueue1, FanoutExchange fanoutExchange){return BindingBuilder.bind(fanoutQueue1).to(fanoutExchange);}@RabbitListener(queues = "Fanout_Q01")public void receiveMessage(OrderingOk msg){System.out.println("FanoutConsumer1 消费者1 收到消息:"+msg);}@RabbitListener(queues = "Fanout_Q01")public void receiveMessage32(OrderingOk msg){System.out.println("FanoutConsumer1 消费者2 收到消息:"+msg);}}

生产者

@Service
public class FanoutProvider {@Autowiredprivate RabbitTemplate rabbitTemplate;public void send(Object message) {rabbitTemplate.convertAndSend("Fanout_E01", "", message);}
}

4.3、TopicExchange(主题交换机)

消费者

/** Copyright (c) 2020, 2024, fpl1116.cn All rights reserved.**/
package com.fpl.consumers;import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.context.annotation.Bean;/*** <p>Project: spring-rabbitmq - TopicConsumer</p>* <p>Powered by fpl1116 On 2024-04-08 11:38:20</p>* <p>描述:<p>* @author penglei* @version 1.0* @since 1.8*/
//@Configuration
public class TopicConsumer {@Beanpublic TopicExchange topicExchange(){return  ExchangeBuilder.topicExchange("Topic_E01").build();}@Beanpublic Queue topicQueue1(){return   QueueBuilder.durable("小龙").build();}@Beanpublic Queue topicQueue2(){return   QueueBuilder.durable("小虎").build();}@Beanpublic Queue topicQueue3(){return   QueueBuilder.durable("小羊").build();}//注册交换机@Bean //交换机与队列关系public Binding TopicBinding1(Queue topicQueue1, TopicExchange topicExchange){return BindingBuilder.bind(topicQueue1).to(topicExchange).with("#");}@Bean //交换机与队列关系public Binding TopicBinding2(Queue topicQueue2,TopicExchange topicExchange){return BindingBuilder.bind(topicQueue2).to(topicExchange).with("1.6.*");}@Bean //交换机与队列关系public Binding TopicBinding3(Queue topicQueue3,TopicExchange topicExchange){return BindingBuilder.bind(topicQueue3).to(topicExchange).with("1.8.*");}@RabbitListener(queues = "小龙")public void receiveMessage(String msg){System.out.println("小龙 收到消息:"+msg);}@RabbitListener(queues = "小虎")public void receiveMessage2(String msg){System.out.println("小虎 收到消息:"+msg);}@RabbitListener(queues = "小羊")public void receiveMessage3(String msg){System.out.println("小羊 收到消息:"+msg);}
}

生产者

@Service
public class TopicProvider {@Autowiredprivate RabbitTemplate rabbitTemplate;public void send(Girl girl) {rabbitTemplate.convertAndSend("Topic_E01",girl.getHeight(), girl);}
}

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

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

相关文章

【C++成长记】C++入门 |auto、范围for、nullptr

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;C❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、auto关键字 1、auto简介 2、auto的使用细则 &#xff08;1&#xff09; auto与指针和引用结合起…

多线程入门

文章目录 多线程相关的概念什么是多线程多线程的创建方式继承Thread方式实现Runable方式两种方式比较Thread类中常用方法 多线程相关的概念 并发与并行 并行&#xff1a;在同一时刻&#xff0c;有多个任务在多个CPU上同时执行。并发&#xff1a;在同一时刻&#xff0c;有多个任…

[网鼎杯 2020 玄武组]SSRFMe

[网鼎杯 2020 玄武组]SSRFMe 源码 <?php function check_inner_ip($url) {$match_resultpreg_match(/^(http|https|gopher|dict)?:\/\/.*(\/)?.*$/,$url);if (!$match_result){die(url fomat error);}try{$url_parseparse_url($url);}catch(Exception $e){die(url foma…

Linux内核

一、 内核开发与逻辑开发对比 内核开发&#xff1a; 需要应用程序调用API去在操作系统里对硬件进行操作。操作系统不允许用户直接去通过置GPIO口1或者0去控制硬件&#xff0c;为了管理这一切。操作系统将整个开发中分成了两个空间&#xff0c;一个是用户空间&#xff08;上两…

HarmonyOS 开发-Navigation页面跳转对象传递案例

介绍 本示例主要介绍在使用Navigation实现页面跳转时&#xff0c;如何在跳转页面得到转入页面传的类对象的方法。实现过程中使用了第三方插件class-transformer&#xff0c;传递对象经过该插件的plainToClass方法转换后可以直接调用对象的方法&#xff0c; 效果图预览 使用说…

pta L1-011 A-B

L1-011 A-B 分数 20 全屏浏览 切换布局 作者 陈越 单位 浙江大学 本题要求你计算A−B。不过麻烦的是&#xff0c;A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉&#xff0c;剩下的字符组成的就是字符串A−B。 输入格式&#xff1a; 输入在2行中先后给出…

YOLOv9改进策略 :小目标 | 新颖的多尺度前馈网络(MSFN) | 2024年4月最新成果

💡💡💡本文独家改进:多尺度前馈网络(MSFN),通过提取不同尺度的特征来增强特征提取能力,2024年最新的改进思路 💡💡💡创新点:多尺度前馈网络创新十足,抢先使用 💡💡💡如何跟YOLOv8结合:1)放在backbone后增强对全局和局部特征的提取能力;2)放在detect…

蝙蝠优化算法(bat optimization algorithm)

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 算法背景 蝙蝠优化算法&#xff08;Bat Algorithm&#xff09;是一种基于群体智能的优化算法&#xff0c;它的灵感来源于蝙蝠捕食时的回声定位行…

Linux(Ubuntu)中创建【samba】服务,用于和Windows系统之间共享文件

目录 1.先介绍一下什么是Samba 2.安装&#xff0c;配置服务 安装 配置&#xff08;smb.conf&#xff09; 配置用户 3.出现的问题&#xff08;Failed to add entry for user XXXX&#xff09; 4.创建文件夹 5.windows访问 6.其他 Samba【服务状态】查看 Samba服务启动…

面试必问 - CSS 中元素居中小技巧

在网页设计中&#xff0c;居中是一个至关重要的布局技巧&#xff0c;能够确保你的页面在不同设备和屏幕尺寸上呈现出优雅的样式。 在这篇文章中&#xff0c;将介绍一些 CSS 居中的基本技巧&#xff0c;适用于各种场景。 1. 水平居中 文本水平居中 通过设置 text-align: cen…

Training - Kubeflow 的 PyTorchJob 配置 DDP 分布式训练 (ncclInternalError)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/137569332 Kubeflow 的 PyTorchJob 是 Kubernetes 自定义资源&#xff0c;用于在 Kubernetes 上运行 PyTorch 训练任务&#xff0c;是 K…

网格矢量如何计算莫兰指数

网格矢量如何计算莫兰指数 引言 遇到一个问题&#xff0c;计算矢量网格的莫兰指数。 概念解释 莫兰指数 莫兰指数&#xff08;Moran’s Index&#xff09;是一种空间自相关指标&#xff0c;用于衡量空间数据的相似性和聚集程度。它可以用来描述一个区域与其邻近区域之间的属…

MySQL之函数:字符串函数、日期函数、数值函数、流程函数

字符串函数&#xff1a;用于对文本数据进行操作和处理 CONCAT&#xff1a;用于将多个字符串连接成一个字符串。 SELECT CONCAT(Hello, , World); -- 输出: Hello WorldSUBSTRING&#xff1a;用于截取字符串的子串。包前不包后&#xff0c;从1开始 SELECT SUBSTRING(MySQL, 1, …

这4大流氓软件,以后看见记得绕着走。

第一个&#xff0c;2345浏览器。时不时弹出广告&#xff0c;还会自动修改你的默认主页&#xff0c;并且很难修改回去。 第二个&#xff0c;搜狗输入法。别以为它打字很方便&#xff0c;实际上弹广告也很方便。 第三个&#xff0c;快压。解压不仅给你弹广告&#xff0c;还能让…

TCP-IP详解卷一:协议——阅读总结

该内容适合程序员查看 第1章 概述 1.1 引言 WAN全称是 Wide Area Network&#xff0c;中文名为广域网。 LAN全称是 Local Area Network&#xff0c;中文名为局域网。 1.2分层 ICP/IP协议族通常被认为是一个四层协议系统 分层协议应用层Telnet、FTP和e-mail运输层TCP和UDP网…

在Terraform中定义模块依赖关系

在Terraform中定义模块依赖关系 是指在Terraform配置文件中明确声明模块之间的依赖关系&#xff0c;以确保正确的部署和管理基础设施。 Terraform是一个开源的基础设施即代码工具&#xff0c;它允许开发人员使用简单的声明性语言来定义和管理基础设施资源。模块是Terraform中…

EVAL-21489-EZLITE原理图下载方法

1&#xff0c;进入官网&#xff0c;搜索“21489”&#xff1a; 2&#xff0c;下拉找到EVAL-21489-EZLITE&#xff0c;点击“文件”&#xff1a; 3&#xff0c;点击“电路板设计数据库”的“查看全部”&#xff1a; 4&#xff0c;点击下载即可&#xff1a; 5&#xff0c;下载完成…

系统设计之订单系统中如何防止商品超卖

一、策略 在订单系统中&#xff0c;防止商品超卖是一个至关重要的问题&#xff0c;涉及到多个方面的策略和技术。以下是一些防止商品超卖的主要措施&#xff1a; 库存实时同步与检查&#xff1a; 确保订单系统和库存系统之间的数据实时同步&#xff0c;每次订单生成或取消时&…

Python 全栈体系【四阶】(二十五)

第五章 深度学习 二、计算机视觉基本理论 11. 图像梯度处理 11.1 什么是图像梯度 图像梯度计算的是图像变化的速度。对于图像的边缘部分&#xff0c;其灰度值变化较大&#xff0c;梯度值也较大&#xff1b;相反&#xff0c;对于图像中比较平滑的部分&#xff0c;其灰度值变化…

【鸿蒙开发】ArkTS和组件

1. 初识ArkTS语言 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性。 当前&#xff0c;ArkTS在TS的基础上主要扩展了如下能力&#xff1a; 基本语法&#xff1a;ArkTS定义了声明式UI描述、自…