如何使用Spring Cloud搭建MQ(Message Queue)消息队列
Spring Cloud是一个开源框架,用于构建基于微服务架构的应用程序。它提供了多种工具和技术,用于实现各种微服务模式,并使它们易于管理和部署。MQ(消息队列)则是一种重要的异步通信机制,用于在不同的应用程序之间进行通信。在本篇博客中,我们将详细讲解如何使用Spring Cloud搭建MQ。
目录
第一部分:什么是Spring Cloud?
第二部分:什么是MQ?
第三部分:使用Spring Cloud搭建MQ
1. 准备工作
2. 添加依赖项
3. 配置RabbitMQ
4. 创建生产者
5. 创建消费者
6. 配置消息队列
7. 测试应用程序
8. 高级配置
8.1 定义交换器
8.2 定义队列
8.3 定义绑定
8.4 配置RabbitMQ连接
8.5 测试应用程序
总结
第一部分:什么是Spring Cloud?
Spring Cloud是一个基于Spring Framework的开源框架,用于构建基于微服务架构的应用程序。它为开发人员提供了一套工具和技术,可以轻松地实现和管理各种微服务模式。Spring Cloud提供了各种解决方案,包括服务发现、配置管理、负载均衡、断路器、API网关等,使得开发人员能够轻松地创建和管理微服务。
第二部分:什么是MQ?
MQ(消息队列)是一种重要的异步通信机制,用于在不同的应用程序之间进行通信。它允许应用程序之间的异步通信,可以提高应用程序的可伸缩性和可靠性。MQ通常由生产者、消费者和消息队列组成,其中生产者将消息发送到消息队列,消费者从消息队列中接收消息并对其进行处理。MQ还提供了一些高级功能,如消息持久性、事务支持、消息路由和过滤器等。
第三部分:使用Spring Cloud搭建MQ
1. 准备工作
在开始搭建MQ之前,我们需要进行一些准备工作。首先,我们需要安装RabbitMQ服务器,并确保其已启动。其次,我们需要确保已安装Spring Boot和Spring Cloud,并已将它们添加到项目依赖中。最后,我们需要创建一个Spring Boot项目,以便我们可以开始编写代码。
2. 添加依赖项
在开始编写代码之前,我们需要添加一些必要的依赖项。在pom.xml文件中添加以下依赖项:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
这将使我们能够使用Spring Cloud Stream,它是Spring Cloud用于构建消息驱动微服务的解决方案。
3. 配置RabbitMQ
在我们可以开始使用RabbitMQ之前,我们需要配置它。我们可以在application.properties文件中添加以下属性:
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
这些属性指定了RabbitMQ服务器的主机名、端口号、用户名和密码。
4. 创建生产者
现在我们已经准备好了,我们可以开始编写代码了。首先,我们将创建一个生产者,它将发送消息到RabbitMQ消息队列。以下是一个简单的生产者实现:
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;@Component
public class Producer implements CommandLineRunner {@Autowiredprivate RabbitTemplate rabbitTemplate;@Overridepublic void run(String... args) throws Exception {String message = "Hello RabbitMQ!";rabbitTemplate.convertAndSend("myExchange", "myRoutingKey", message.getBytes());System.out.println("Sent message: " + message);}
}
在这个例子中,我们使用了Spring Boot的CommandLineRunner接口来定义我们的生产者。在run()方法中,我们使用RabbitTemplate来发送消息到名为"myExchange"的交换器,并使用"myRoutingKey"路由键。我们还打印了发送的消息以供参考。
5. 创建消费者
接下来,我们将创建一个消费者,它将从RabbitMQ消息队列中接收消息并对其进行处理。以下是一个简单的消费者实现:
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Component
public class Consumer {@RabbitListener(queues = "myQueue")public void processMessage(byte[] message) {String text = new String(message);System.out.println("Received message: " + text);}
}
在这个例子中,我们使用了Spring Boot的RabbitListener注解来定义我们的消费者。processMessage()方法将接收到的字节数组转换为字符串,并打印出接收到的消息。
6. 配置消息队列
在我们可以测试我们的生产者和消费者之前,我们需要配置消息队列。在Spring Boot中,我们可以使用注解来定义消息队列。以下是我们需要在应用程序中添加的注解:
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RabbitMQConfig {@Beanpublic Queue myQueue() {return new Queue("myQueue", false);}
}
在这个例子中,我们使用了@Configuration注解来定义我们的配置类。我们还使用@Bean注解来定义名为"myQueue"的消息队列。
7. 测试应用程序
现在我们已经完成了所有的设置和配置,可以测试我们的应用程序了。运行应用程序并检查控制台输出,确保生产者已成功发送消息并且消费者已成功接收并处理消息。
8. 高级配置
Spring Cloud还提供了一些高级配置选项,可以帮助我们更好地管理和控制消息队列。例如,我们可以使用以下注解来定义交换器和路由键:
8.1 定义交换器
交换器用于将消息路由到正确的队列。在这个例子中,我们将使用Spring Boot的ExchangeBuilder来创建一个名为"myExchange"的直接交换器:
@Bean
public Exchange myExchange() {return ExchangeBuilder.directExchange("myExchange").durable(true).build();
}
在这个例子中,我们使用了@Bean注解来定义名为"myExchange"的直接交换器。我们还使用了durable(true)选项来使交换器持久化,这样即使在RabbitMQ服务器关闭后也能保留交换器。
8.2 定义队列
在这个例子中,我们将创建两个队列,一个用于普通消息,一个用于重要消息。以下是我们需要在应用程序中添加的注解:
@Bean
public Queue myQueue() {return new Queue("myQueue", false);
}@Bean
public Queue importantQueue() {return new Queue("importantQueue", false);
}
在这个例子中,我们使用了@Bean注解来定义名为"myQueue"和"importantQueue"的两个队列。我们还使用了durable(false)选项来使队列非持久化,这样如果RabbitMQ服务器关闭,队列中的消息将会丢失。
8.3 定义绑定
在这个例子中,我们将定义绑定,将交换器和队列连接起来。以下是我们需要在应用程序中添加的注解:
@Bean
public Binding myBinding() {return BindingBuilder.bind(myQueue()).to(myExchange()).with("myRoutingKey").noargs();
}@Bean
public Binding importantBinding() {return BindingBuilder.bind(importantQueue()).to(myExchange()).with("importantRoutingKey").noargs();
}
在这个例子中,我们使用了@Bean注解来定义名为"myBinding"和"importantBinding"的两个绑定。我们还使用了with()选项来指定路由键,以便将消息发送到正确的队列。
8.4 配置RabbitMQ连接
在这个例子中,我们还需要配置RabbitMQ连接,以便我们的应用程序可以与RabbitMQ服务器通信。以下是我们需要在应用程序中添加的属性:
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
在这个例子中,我们使用了Spring Boot的属性文件来配置RabbitMQ连接。我们指定了RabbitMQ服务器的主机名、端口号、用户名和密码。
8.5 测试应用程序
现在我们已经完成了所有的设置和配置,可以测试我们的应用程序了。运行应用程序并检查控制台输出,确保生产者已成功发送消息并且消费者已成功接收并处理消息。还要确保消息已正确地路由到相应的队列中。
总结
在本文中,我们介绍了RabbitMQ作为消息代理的基本概念,包括交换器、队列、绑定和路由键等。我们还介绍了Spring Boot如何与RabbitMQ集成,并使用Spring Cloud Stream来简化消息传输和处理过程。
在代码示例中,我们展示了如何创建生产者和消费者,并使用注解来定义交换器、队列和绑定。我们还演示了如何配置RabbitMQ连接,并测试了应用程序的正确性和可靠性。
总的来说,本文是一个入门级别的指南,希望能够帮助读者更好地理解和应用Spring Cloud和消息队列技术。如果您想深入学习和了解更多高级主题,可以参考官方文档和其他在线资源。
相关文章:
如何使用Spring Cloud搭建MQ(Message Queue)消息队列
Spring Cloud是一个开源框架,用于构建基于微服务架构的应用程序。它提供了多种工具和技术,用于实现各种微服务模式,并使它们易于管理和部署。MQ(消息队列)则是一种重要的异步通信机制,用于在不同的应用程序…...
iphone备忘录删除怎么恢复?分享苹果数据找回办法
手机备忘录上写记录,这是不少上班族的小习惯。因为它可以先记录紧急事务,然后再慢慢的解决。也可以把我们一些重要的账号密码存在备忘录里,方便在何时何地直接登入使用。那么如果我们不小心删除了iphone备忘录呢?碰到这种事该怎么办呢?有没…...
【PPT】《我去!还有这种网站?》-知识点目录
《我去!还有这种网站?》 1. Vega AI 输入提示: girl,粉头发2. 物理画线:休闲小游戏 3. Dialogue:影视台词搜索 4. Can you run it:游戏设备要求查询 5. Deviceshots:使用设备边…...
SQL 将查询结果插入到另一张表中
INSERT INTO (1) 如果两张表(导出表和目标表)的字段一致,并且希望插入全部数据,可以用这种方法: INSERT INTO 目标表 SELECT * FROM 来源表 WHERE 条件;例如,要将 test 表插入到 n…...
代码随想录算法训练营day48 | 动态规划 121 买卖股票的最佳时机 122 买卖股票的最佳时机II
day48121. 买卖股票的最佳时机1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组122.买卖股票的最佳时机II121. 买卖股票的最佳时机 题目链接 解题思路: 动规五部曲分析如下:…...
MediaTek 天玑 8000 5G移动平台详细参数
MediaTek 天玑 8000 移动平台 采用先进的 台积电 5nm 工艺,拥有出众的性能和能效,为高端智能手机用户提供出色的高帧率游戏和 5G 移动体验。 天玑 8000 采用了 MediaTek 诸多先进技术,内置 MediaTek Imagiq 780影像引擎、第五代 AI 处理器APU…...
Kafka
这里写目录标题1.Kafka1.1 Kafka概述1.2 kafka安装和配置1.3 入门案例1.4 kafka生产者详解1.4.1 生产者的参数1.Kafka 1.1 Kafka概述 Kafka 是一个分布式流媒体平台,类似于消息队列或企业消息传递系统。 producer:发布消息的对象称之为主题生产者(Ka…...
数据结构——第三章 栈与队列(2)
栈的运用1.括号匹配2.表达式求值2.1.算术表示式的形式2.2.后缀表达式求值2.3.将算术表达式转换为后缀表达式2.4.算术表达式直接求值3.栈与递归3.1.递归算法3.2.栈与函数调用3.3.递归工作与递归函数3.4.递归到非递归的转换1.括号匹配 void matching(char str[]) {//创建空栈Lin…...
【Linux学习】基础IO——理解缓冲区 | 理解文件系统
🐱作者:一只大喵咪1201 🐱专栏:《Linux学习》 🔥格言:你只管努力,剩下的交给时间! 基础IO☕理解缓冲区🧃缓冲区的共识🧃缓冲区的位置🧃缓冲区的刷…...
RHCSA-重置root密码(3.3)
方法1:rd.break (1)首先重启系统,在此页面按e键,在屏幕上显示内核启动参数 (2)知道linux这行,末尾空格后输入rd.break,然后按ctrlx (3)查看&#…...
无公网IP快解析实现U+随时随地访问
现阶段商品从生产到消费者手中要经过多个环节,为实现对每一个环节进行管理,越来越多的企业选择通过信息化手段来实现。供应链管理系统配合供应链中各实体的业务需求,使操作流程和信息系统紧密配合,做到各环节无缝链接,…...
UVa 307 Sticks 木棍拼接 ID 迭代加深搜
题目链接:Sticks 题目描述: 小明一开始有一些长度相等的木棍,小明现在将木棍砍成了一些长度为整数的木棍,他现在忘记了最开始木棍的长度,你需要找到最短的可能木棍长度,例如给定5,2,1,5,2,1,5,2,15,2,1,5,2…...
阿里云(CentOS)中MySQL8忘记密码的解决方法
阿里云(CentOS)中MySQL8忘记密码的解决方法 方法 在 skip-grant-tables 模式下启动 MySQL,该模式下启动 MySQL 时不启动授权表功能,可以直接免密码登录 实现 编辑 /etc/my.cnf 文件 vim /etc/my.cnf在 [mysqld] 区域末尾添加配置,设置免密…...
三、Spring的入门程序
第一个Spring程序 创建新的空工程spring6 设置JDK版本17,编译器版本17 设置IDEA的Maven:关联自己的maven 在空的工程spring6中创建第一个maven模块:spring6-001-first 在pom.xml添加spring context依赖和junit依赖, <?x…...
摘录一下Python列表和元组的学习笔记
1 基础概念 列表一个值,列表值指的是列表本身,而不是列表中的内容 列表用[]表示 列表中的内容称为 表项 len()函数可以显示列表中表项的个数,比如下面这个例子 spam [cat, bat, dog, rat]print(len(spam))列表的范围选取中,比…...
【量化金融】收益率、对数收益率、年华收益、波动率、夏普比率、索提诺比率、阿尔法和贝塔、最大回撤
【量化金融】收益率、对数收益率、年华收益、波动率、夏普比率、索提诺比率、阿尔法和贝塔、最大回撤 1 收益率 在学术界,建模一般不直接使用资产价格,而是使用资产收益率(Returns)。因为收益率比价格具有更好的统计特性,更便于建模。下经典…...
1_机器学习概述—全流程
文章目录1 机器学习定义2 机器学习常见应用框架(重点)3 机器学习分类3.1 监督学习(Supervised learning)3.2 无监督学习(Unsupervised learning)3.3 半监督学习(Semi-Supervised Learning&#…...
VUE中给对象添加新属性时,界面不刷新怎么办
一、直接添加属性的问题 举例: 定义一个p标签,通过v-for指令进行遍历 然后给botton标签绑定点击事件,我们预期点击按钮时,数据新增一个属性,界面也 新增一行。 <p v-for"(value,key) in item" :key&qu…...
视频号频出10w+,近期爆红的账号有哪些?
回顾2月,视频号持续放出大动作,不仅进行了16小时不间断的NBA全明星直播,还邀请国际奥委会入驻,分享奥运的最新资讯。视频号成为越来越多官方机构宣传推广的有效渠道。官方积极入驻,内容创作生态也在同步繁荣发展&#…...
企业寄件现代化管理教程
现代化企业为了跟上时代发展的步伐,在不断完善着管理制度,其中公司寄件管理,也是重要的一个模块。为了提高公司快递的寄件效率,以及节约寄件成本,实现快递寄件的规范化,越来越多的现代化企业,开…...
django 在网页显示后台进度
1、定义函数打开网页 def PeformanceIndex(request): citys{‘wuhu’: ‘芜湖’, ‘xuancheng’: ‘宣城’, ‘tongling’: ‘铜陵’, ‘suzhou’: ‘宿州’, ‘maanshan’: ‘马鞍山’, ‘liuan’: ‘六安’, ‘huainan’: ‘淮南’, ‘huabei’: ‘淮北’, ‘hefei’: ‘合肥…...
机器学习库(Numpy, Scikit-learn)
Numpy 创建数组 import numpy as npa np.array([1,2,3]) b np.array([(1.5,2,3), (4,5,6)], dtype float) c np.array([[(1.5,2,3), (4,5,6)], [(3,2,1), (4,5,6)]],dtype float)创建占位符 z1np.zeros((3,4)) z2np.ones((2,3,4),dtypenp.int16) z3d np.arange(10,25,5)…...
Linux操作系统学习(进程替换)
文章目录进程替换进程替换是什么?替换的方法进程替换简易shell模拟进程替换 进程替换是什么? 如下图所示: 进程替换就是,把进程B的代码和数据,替换正在执行的进程A的代码和数据在内存中的位置(若代码…...
【C++从入门到放弃】类和对象(中)———类的六大默认成员函数
🧑💻作者: 情话0.0 📝专栏:《C从入门到放弃》 👦个人简介:一名双非编程菜鸟,在这里分享自己的编程学习笔记,欢迎大家的指正与点赞,谢谢! 类和对…...
白盒测试重点复习内容
白盒测试白盒测试之逻辑覆盖法逻辑覆盖用例设计方法1.语句覆盖2.判定覆盖(分支覆盖)3.条件覆盖4.判定条件覆盖5.条件组合覆盖6.路径覆盖白盒测试之基本路径测试法基本路径测试方法的步骤1.根据程序流程图画控制流图2.计算圈复杂度3.导出测试用例4.准备测试用例5.例题白盒测试总…...
【13】linux命令每日分享——groupadd建立组
大家好,这里是sdust-vrlab,Linux是一种免费使用和自由传播的类UNIX操作系统,Linux的基本思想有两点:一切都是文件;每个文件都有确定的用途;linux涉及到IT行业的方方面面,在我们日常的学习中&…...
《第一行代码》 第十章:服务
一,在子线程中更新UI 1,新建项目,修改布局代码 <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"&g…...
简单介绍编程进制
十进制 十进制的位权为 10,比如十进制的 123,123 1 * 10 ^ 2 2 * 10 ^ 1 3 * 10 ^ 0。 二进制 二进制的位权为 2,比如十进制的 4,二进制为 100,4 1 * 2 ^ 2 0 * 2 ^ 1 0 *2 ^ 0。 Java7 之前,不支…...
windows忘记开机密码怎么办
windows忘记开机密码怎么办 清除windows登录密码 清除windows登录密码简单方法 开机到欢迎界面时,按CtrlAltDelete两次,跳出帐号窗口,输入用户名:administrator,回车, 或者启动时按F8 选“带命令行的安全…...
SpringCloud:Eureka
目录 一、eureka的作用 二、搭建Eureka服务端 三、添加客户端 四、服务发现 提供者与消费者 服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务) 服务消费者:一次业务中,调用其它微服务的服…...
网站页面建设规划文案/2021谷歌搜索入口
如果是评估版本,则需要先把评估版本升级为正式版本,才能正确的使用。 1.管理员模式运行cmd,输入命令:DISM /online /Get-CurrentEdition,得到结果: 部署映像服务和管理工具 版本: 10.0.14393.0 映像版本: 10.0.14393.0 当前版本为…...
中国网站建设公司排行榜/橙子建站怎么收费
测试工程中需要引入Masonry,在进行添加新库时发现了几个问题,记录如下,方便有相同问题的朋友查找解决:1,podfile中添加 pod ‘Masonry’ 后,pod install --verbose --no-repo-update 报错报错内容如链接&am…...
有域名怎么建网站/站长统计app软件大全
为什么80%的码农都做不了架构师?>>> 使用top命令,查看cpu占用过高的java PID (如PID9876)使用ps aux|grep PID (ps aux|grep 9876)查看是那个java程序占用cpu 。ps -mp PID -o THREAD,tid,ti…...
外贸公司没网站/网络培训网站
在mybatis的mapper.xml和mapper文件映射时,注意返回为空的情况 这里写成对象不要写成int...
保温管有哪些网站做/google chrome官网下载
Dan Griffin本文讨论: 新的凭据提供程序体系结构 为什么弃用了基于 GINA 的身份验证 多因素 (Multi-factor) 身份验证 开发和调试凭据提供程序 本文使用了以下技术: Windows Vista、C目录 新旧两种体系结构的比较 混合凭据提供程序 要求 设计 混合凭据提供程序 混合方式的实现…...
网站建设 推广/搜索词分析
深深以为,遇见一个好的文章不容易,希望自己也能用心填坑。 首先来说读取用户信息,之前是用getUserInfo(),但在2018年4月30日之后,该接口不适用于开发版和测试版,正式上线的小程序不受影响。很不幸ÿ…...