SpringBoot 整合 RabbitMQ demo

news2025/4/8 2:11:49

Rabbit Windows安装教程
本文只做Demo案例的分享,具体只是需自行百度

一、生产者

1.application.properties
配置Rabbit的基本信息

#rabbit 主机IP
spring.rabbitmq.host=127.0.0.1
#rabbit 端口
spring.rabbitmq.port=5672
#rabbit 账号 可自行创建 这里是默认的
spring.rabbitmq.username=guest
#rabbit 密码 可自行创建 这里是默认的
spring.rabbitmq.password=guest
#rabbit 虚拟机地址 可自行指定 这里是默认的
spring.rabbitmq.virtual-host=/
#主程序的端口 和 rabbit无关
server.port=8081

2.pom文件
导入两个maven依赖
第一个是SpringBoot集成的rabbit
第二个是web依赖,用来方便发消息

<!--RabbitMq-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!--Web 方便用来发消息-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

3.Rabbit配置类
这里用的是主题模式,也就是模糊匹配的模式
这里设置的是只要是rabbit.开头就会进入这个队列
更详细的方法意义 请自行百度

@Configuration
public class RabbitConfig {

    public static final String EXCHANGE_NAME = "rabbit_exchange";
    public static final String QUEUE_NAME = "rabbit_queue";
    /**
     * 创建交换机
     * ExchangeBuilder有四种交换机模式
	 * Direct Exchange:直连交换机,根据Routing Key(路由键)进行投递到不同队列。
     * Fanout Exchange:扇形交换机,采用广播模式,根据绑定的交换机,路由到与之对应的所有队列。
     * Topic Exchange:主题交换机,对路由键进行模式匹配后进行投递,符号#表示一个或多个词,*表示一个词。
     * Header Exchange:头交换机,不处理路由键。而是根据发送的消息内容中的headers属性进行匹配。
     * durable 交换器是否持久化(false 不持久化,true 持久化)
     **/
    @Bean
    public Exchange rabbitExchange(){
        return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
    }
	/**
	 * 创建队列
	 * durable 队列是否持久化 队列调用此方法就是持久化 可查看方法的源码
	 * deliveryMode 消息是否持久化(1 不持久化,2 持久化)
	 **/
    @Bean
    public Queue rabbitQueue(){
        return QueueBuilder.durable(QUEUE_NAME).build();
    }
	/**
	* 绑定交换机和队列
	* bing 方法参数可以是队列和交换机
	* to 方法参数必须是交换机
	* with 方法参数是路由Key 这里是以rabbit.开头
	* noargs 就是不要参数的意思
	* 这个方法的意思是把rabbit开头的消息 和 上面的队列 和 上面的交换机绑定
	**/
    @Bean
    public Binding rabbitBinding(@Qualifier("rabbitExchange") Exchange exchange, @Qualifier("rabbitQueue") Queue queue){
        return BindingBuilder.bind(queue).to(exchange).with("rabbit.#").noargs();
    }

}

4.Controller
这里整一个网页调用的形式进行发送信息

@RestController
public class ProducerWebController {

    @Autowired
    ProducerService producerService;

    @RequestMapping("/sendMq")
    public String sendMq(@RequestParam("mq") String mq){
        return producerService.sendMq(mq);
    }

}

5.Service
在service层注入RabbitTemplate
convertAndSend 即是消息发送的方法

public interface ProducerService {
    public String sendMq(String mq);
}
@Service
public class ProducerServiceImpl implements ProducerService {

    @Autowired
    RabbitTemplate rabbitTemplate;

	/**
	* convertAndSend 参数
	* 第一个是交换机的名字
	* 第二个是队列的具体名字 因为是rabbit开头 因为RabbitConfig设置rabbit开头通配 所以会被监听到
	* 第三个是具体的消息
	**/
    @Override
    public String sendMq(String mq) {
        rabbitTemplate.convertAndSend(RabbitConfig.EXCHANGE_NAME, "rabbit.demo", mq);
        return "发送成功,消息是:" + mq;
    }
}

6.发送消息
启动生产者程序
浏览器输入 127.0.0.1/sendMq?mq=测试
在这里插入图片描述
在这里插入图片描述

二、消费者

1.application.properties

spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtual-host=/
server.port=8082

2.Rabbit监听
只需要在消费者中创建一个监听即可监听到队列的消息
可以直接打印出Message消息

@Component
public class ConsumerListener {

	/**
	* 设置监听哪一个队列 这个队列是RabbitConfig里面设置好的队列名字
	**/
    @RabbitListener(queues = "rabbit_queue")
    public void listenQueue(Message message){
        System.out.println(new String(message.getBody()));
    }

}

在这里插入图片描述

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

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

相关文章

秀offer:大学老师15w、工商银商20w、字节40w,去哪个?

一个粉丝小伙伴给我发消息&#xff1a; 孟哥&#xff0c;想问下三个offer如何选择&#xff0c;我和家里人的意见不一样。我是双非的小硕。比较喜欢大学的氛围&#xff0c;才应聘了下。是一个三本的民办的&#xff0c;二本的完全够不上。工商在南京&#xff0c;待遇还算不错。字…

安卓进程间通信浅谈

Case: /Users/lucas/AndroidStudioProjects/aidldemo-master 一&#xff1a;操作系统 从操作系统原理去看&#xff0c;进程通信主要有三个方法&#xff1a;共享存储、消息传递、管道通信。 二&#xff1a;安卓中的IPC 进程间通信的几种方式&#xff1a;Intent&#xff08;Bu…

使用Visual Studio打造强大的程序,从添加第三方库开始

使用Visual Studio打造强大的程序&#xff0c;从添加第三方库开始 博主简介一、引言二、理解第三方库三、下载和安装第三方库四、示例代码和演示五、总结 博主简介 &#x1f4a1;一个热爱分享高性能服务器后台开发知识的博主&#xff0c;目标是通过理论与代码实践的结合&#x…

Vscode自定义注释模板

首先安装插件Doxygen Documentation Generator&#xff0c;安装完成之后点击Doxygen插件的设置&#xff0c;按照下面的步骤打开settings.json进行编辑&#xff1a; 在settings.json中追加如下代码&#xff1a; "doxdocgen.file.copyrightTag": ["Copyright (C),…

如何在Arch Linux上安装最新的GNOME Alpha/Beta版本

导读这是为那些想在 Arch Linux 上安装下一个主要版本的 GNOME 桌面环境的 alpha 或 beta 开发版的用户提供的快速而又肮脏的教程&#xff0c;仅供测试之用。 每次有新的 GNOME alpha 版本发布&#xff0c;人们都会问我如何在各种 GNU/Linux 发行版上安装。我总是告诉他们&…

SUM(整除分块)

题目描述 给定 x &#xff0c;y , 求 的值 . 其中 &#xff0c; 代表向下取整 输入描述 第一行一个正整数 T(1≤T≤100)&#xff0c; 表示测试用例的数目。每个测试用例占一行。 接下来的 T 行&#xff0c;每行两个正整数 x, y 。 输出描述 输出共 T 行&#xff0c;…

Laravel文档阅读笔记-How to enable CORS on Laravel

使用中间件为http响应头添加Access-Control-Allow-Origin 1.创建Cors中间件&#xff1a; $ php artisan make:middleware Cors 2.编辑中间件&#xff1a; <?phpnamespace App\Http\Middleware;use Closure;class Cors {/*** Handle an incoming request.** param \Ill…

wordpress后台的路径都是空白,进不了后台怎么办?

主题或插件冲突&#xff1a;某些主题或插件可能与其他已安装的主题或插件不兼容&#xff0c;导致登录页面显示为空白。您可以通过禁用所有插件和将主题更改为默认主题来查看是否解决了问题。如果解决了问题&#xff0c;则可以逐个重新启用插件以找出是哪个插件造成冲突。 PHP错…

Express 框架介绍

目录 1、简介 1.1 Web 应用 1.2 API 1.3 性能 1.4 框架 2、如何开始 Express 编程之旅 3、测试实例 4、其他问题 4.1 如何定义模型&#xff1f; 4.2 Express 支持哪些模板引擎&#xff1f; 4.3 如何处理 404 响应&#xff1f; 4.4 如何设置错误处理程序&#xff1f…

Python3模拟π的求值过程

假设我们已经知道了圆的面积计算公式是&#xff1a;πr&#xff0c;正方形的面积是r&#xff0c;但是不知道π的具体值。模拟结果如图所示&#xff1a;我们将1/4圆的面积s1比上正方形的面积s2就能得出1/4π&#xff0c;所以π就等于4倍的s1/s2。 图中横纵坐标轴最大值均为1&am…

无人驾驶中如何识别颜色并跟踪的具体应用

摄像头对于颜色的识别&#xff0c;我们在上一篇文章中有具体的介绍&#xff0c;并介绍了OpenCV中的一些常见知识点&#xff0c;这里我们来对颜色识别在无人驾驶中&#xff0c;做一个具体应用。 有兴趣的可以先看下本人拍摄的一个视频&#xff1a;无人车识别颜色并跟踪 通过…

PICO4开发实战一:节奏光剑(VR)(需求文档)

PICO4开发实战一&#xff1a;节奏光剑&#xff08;VR&#xff09;&#xff08;需求文档&#xff09; 文章目录 PICO4开发实战一&#xff1a;节奏光剑&#xff08;VR&#xff09;&#xff08;需求文档&#xff09;一、V1 基础功能开发1、V1版本完成页面2、V1基本功能需求介绍&am…

81. 正则表达式

一、概述二、匹配单个字符三、匹配一组字符四、使用元字符五、重复匹配六、位置匹配七、使用子表达式八、回溯引用九、前后查找十、嵌入条件参考资料 一、概述 正则表达式用于文本内容的查找和替换。 正则表达式内置于其它语言或者软件产品中&#xff0c;它本身不是一种语言或…

学习react,复制一个civitai(C站)-更新3

更新内容 优化了一下加载速度 图片列表 初步更新了199张图片&#xff0c;大部分都有stable diffusion 的prompts。 可以直接复制到AI绘画里面使用。 先来看看效果图吧&#xff1a; 我还是挺喜欢这种砌砖流布局 技术点 同样使用了砌墙瀑布流布局:masonry js 安装方法 npm …

配置Propos检验

配置Propos检验 ​ 和vue不同react并未为我们直接配置props校验&#xff0c;(类型必填默认值),需要我们就手动进行配置

SqlServer数据库【基础-更删改查】

一、创建语句 &#xff08;1&#xff09;创建数据库 1.检查系统中是否存在这个数据库&#xff0c;存在则删除 格式&#xff1a; if exists(select * from sysdatabases where name数据库名) drop database 数据库名 go例子&#xff1a; if exists(select * from sysdataba…

Redis事务(4)

⭐ 作者简介&#xff1a;码上言 ⭐ 代表教程&#xff1a;Spring Boot vue-element 开发个人博客项目实战教程 ⭐专栏内容&#xff1a;个人博客系统 ⭐我的文档网站&#xff1a;http://xyhwh-nav.cn/ 文章目录 Redis事务1、Redis事务概念2、应用1、MULTI开启事务2、事务失败…

【数据库】数据库索引结构分析,MySQL单表最多能存放多少数据

经常听到MySQL单表最多能存放2千万数据&#xff0c;多了就要考虑分表&#xff0c;依据是什么呢&#xff1f; 本文以MySQL为例&#xff0c;默认数据页大小是16KB。 索引内容结构 非叶子节点 主键页号 假如&#xff1a; 主键是bigint&#xff0c;8bit&#xff1b;页号是4bit&…

Vue中v-html用法以及指令汇总

操作数组的方法 &#xff1a; push&#xff1a;数组最后位置新增元素 pop&#xff1a; 删除最后一个元素 shift&#xff1a; 删除第一个元素 unshift&#xff1a;往前面加一个元素 splice&#xff1a;在数组的指定位置插入、删除、替换一个元素 sort&#xff1a; 数组排序…

力扣算法数学类—Excel表列名称

目录 Excel表列名称 题解&#xff1a; 代码&#xff1a; Excel表列名称 168. Excel表列名称 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数 columnNumber &#xff0c;返回它在 Excel 表中相对应的列名称。 例如&#xff1a; A -> 1 B -> 2 C -> 3 ... Z -…