(七)Spring Cloud Alibaba 2023.x:RocketMQ 消息队列配置与实现
目录
前言
准备
安装RocketMq服务
下载rocketmq服务
下载rocketmq 控制台
项目集成
引入依赖
生产者服务配置
消费者服务配置
发送队列消息
前言
在微服务架构中,异步消息通信是实现系统解耦、提高性能和增强系统可靠性的重要手段。在 Spring Cloud Alibaba 生态中,RocketMQ 与 Spring Boot 深度集成,提供了开箱即用的消息通信解决方案,极大地简化了开发流程,提升了系统的扩展性和可维护性 。
准备
- jdk17+
- maven3.9.4+
- idea2023
- spring cloud: 2023.0.1.0
- spring cloud alibaba: 2023.0.1
源码获取:GitHub - /spring-cloud-alibaba-base-demo: 基于spring cloud alibaba生态快速构建微服务脚手架
安装RocketMq服务
本地window系统安装rocketmq服务
下载rocketmq服务
当前博文版本使用的是:5.2
官方下载地址:下载 | RocketMQ
百度网盘地址:百度网盘 请输入提取码 提取码: 92h6
下载完成解压
在window系统中本地启动rocketmq服务需要配置环境变量,步骤和配置与jdk配置相似
Path变量中添加环境变量
配置完成后进入本地rocketmq的bin文件夹中
首先双击mqnamesrv.cmd启动NameServer服务: 它的作用是提供服务发现、路由信息管理、Broker注册和客户端查询等功能
NameServer服务启动成功后,启动Broker服务:它的作用是消息的存储和传递
当前文件夹cmd执行命令: mqbroker -n localhost:9876
下载rocketmq 控制台
当前博文版本使用的是:2.0.1
官方下载地址:Releases · apache/rocketmq-dashboard
百度网盘地址:百度网盘 请输入提取码 提取码: 92h6
下载完成解压
需要我们自行对项目打包获取jar包
在当前文件夹中cmd执行命令打包:
mvn clean package -Dmaven.test.skip=true
在target文件中找到生成的jar
执行命令启动
java -jar rocketmq-dashboard-2.0.1.jar
浏览器访问地址:http://localhost:8080
注:如果rocketmq的服务地址或者端口进行过调整,那么在打包前自行到项目的application.yml配置文件中更改后再打包
项目集成
根据前面的博文,目前我们已经创建了三个微服务
引入依赖
分别在子模块生产者和消费者服务的pom.xml文件中引入依赖
<!-- 引入消息队列 stream rocketmq -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-stream-rocketmq</artifactId>
</dependency>
生产者服务配置
yml文件配置
spring:application:name: http-cloud-producercloud:stream: #消息中间件rocketmq:binder:name-server: localhost:9876bindings:producer-out-0:producer:group: output_1bindings:producer-out-0:destination: topic0producer-out-1:destination: topic1
相关参数/值解释:
output_1 :自定义的消费者组名称
producer-out-0 :自定义的生产者通道名称
topic0 :自定义队列名称
生成者发送消息服务类实现
@Service
public class MessageProducer {// 自动注入配置文件中绑定的通道@Autowiredprivate StreamBridge streamBridge;// 消息通道public void sendMessageToOutput0(String messageContent) {Map<String, Object> headers = new HashMap<>();headers.put(MessageConst.PROPERTY_TAGS, "tag0");Message<String> msg = new GenericMessage<>(messageContent, headers);streamBridge.send("producer-out-0", msg);}public void sendMessageToOutput1(String messageContent) {Map<String, Object> headers = new HashMap<>();headers.put(MessageConst.PROPERTY_TAGS, "tag1");Message<String> msg = new GenericMessage<>(messageContent, headers);streamBridge.send("producer-out-1", msg);}
}
定义控制层接口
@RestController
public class DemoController {@Autowiredprivate MessageProducer messageProducer;/*** 发送消息队列 topic0* @param message* @return*/@GetMapping(value = "/test/mq/topic0")String sendMqTopic0(@RequestParam("message") String message) {messageProducer.sendMessageToOutput0(message);return "topic0消息发送成功了~~~";}/*** 发送消息队列 topic1* @param message* @return*/@GetMapping(value = "/test/mq/topic1")String sendMqTopic1(@RequestParam("message") String message) {messageProducer.sendMessageToOutput1(message);return "topic1消息发送成功了~~~";}
}
消费者服务配置
配置yml文件
spring:application:name: http-cloud-consumercloud:stream: #消息中间件rocketmq:binder:name-server: localhost:9876bindings:consumer0-in-0:consumer:messageModel: CLUSTERINGconsumer1-in-0:consumer:messageModel: CLUSTERINGbindings:consumer0-in-0:destination: topic0group: clustering-consumerconsumer1-in-0:destination: topic1group: clustering-consumer
相关配置解释:
consumer0-in-0:自定义的消费者通道名称
messageModel:消费者消费模式(集群或者是广播)。本文配置的是集群模式。
topic0 :需要监听的消费者队列名称
clustering-consumer :自定义的消费者组名称
实现消费者mq消费类
@Component
public class MessageConsumer {/*** 通过方法名称自动绑定到符合条件的消费者通道* (注:当前遇到的难点是一个消费者服务只能实现一个消费方法,实现多个消费方法会使消费功能失效)* @return*/@Beanpublic Consumer<Message<String>> consumer1() {return msg -> {System.out.println(Thread.currentThread().getName() + " Consumer1 Receive New Messages: " + msg);};}
}
注:从配置可以看到,消费者监听了2个队列,但上面的MessageConsumer 类只有一个消费方法,目前版本mq会自动将配置在第一个的队列和上面的方法绑定,但是如果需要监听对多队列并进行消费,目前版本博主还未找到实现方案,后续有方案再补上。
发送队列消息
请求接口给队列topic0发送消息
查看消费者服务控制台打印成功
查看rocketMq控制台消息记录
至此Spring Cloud Alibaba集成RocketMq消息队列完成了。
相关文章:
(七)Spring Cloud Alibaba 2023.x:RocketMQ 消息队列配置与实现
目录 前言 准备 安装RocketMq服务 下载rocketmq服务 下载rocketmq 控制台 项目集成 引入依赖 生产者服务配置 消费者服务配置 发送队列消息 前言 在微服务架构中,异步消息通信是实现系统解耦、提高性能和增强系统可靠性的重要手段。在 Spring Cloud Alib…...
2848、与车相交的点
2848、[简单] 与车相交的点 1、题目描述 给你一个下标从 0 开始的二维整数数组 nums 表示汽车停放在数轴上的坐标。对于任意下标 i,nums[i] [starti, endi] ,其中 starti 是第 i 辆车的起点,endi 是第 i 辆车的终点。 返回数轴上被车 任意…...
51单片机开发:温度传感器
温度传感器DS18B20: 初始化时序图如下图所示: u8 ds18b20_init(void){ds18b20_reset();return ds18b20_check(); }void ds18b20_reset(void){DS18B20_PORT 0;delay_10us(75);DS18B20_PORT 1;delay_10us(2); }u8 ds18b20_check(void){u8 time_temp0;wh…...
三甲医院大型生信服务器多配置方案剖析与应用(2024版)
一、引言 1.1 研究背景与意义 在当今数智化时代,生物信息学作为一门融合生物学、计算机科学和信息技术的交叉学科,在三甲医院的科研和临床应用中占据着举足轻重的地位。随着高通量测序技术、医学影像技术等的飞速发展,生物医学数据呈爆发式…...
【机器学习】自定义数据集 ,使用朴素贝叶斯对其进行分类
一、贝叶斯原理 贝叶斯算法是基于贝叶斯公式的,其公式为: 其中叫做先验概率,叫做条件概率,叫做观察概率,叫做后验概率,也是我们求解的结果,通过比较后验概率的大小,将后验概率最大的…...
ASP.NET Core 启动并提供静态文件
ASP.NET Core 启动并提供静态文件 即是单个可执行文件,它既运行 API 项目,也托管 前端项目(通常是前端的发布文件)。 这种方式一般是通过将 前端项目 的发布文件(例如 HTML、CSS、JavaScript)放入 Web AP…...
MySQL 导入数据
MySQL 导入数据 引言 MySQL 是一款广泛使用的开源关系型数据库管理系统,它以其稳定性和高效性被广泛应用于各种规模的应用程序中。在数据库管理过程中,数据的导入是至关重要的一个环节。本文将详细介绍如何在 MySQL 中导入数据,包括导入数据的准备、操作步骤以及注意事项。…...
MINIRAG: TOWARDS EXTREMELY SIMPLE RETRIEVAL-AUGMENTED GENERATION论文翻译
感谢阅读 注意不含评估以后的翻译原论文地址标题以及摘要介绍部分MiniRAG 框架2.1 HETEROGENEOUS GRAPH INDEXING WITH SMALL LANGUAGE MODELS2.2 LIGHTWEIGHT GRAPH-BASED KNOWLEDGE RETRIEVAL2.2.1 QUERY SEMANTIC MAPPING2.2.2 TOPOLOGY-ENHANCED GRAPH RETRIEVAL 注意不含评…...
将 OneLake 数据索引到 Elasticsearch - 第二部分
作者:来自 Elastic Gustavo Llermaly 及 Jeffrey Rengifo 本文分为两部分,第二部分介绍如何使用自定义连接器将 OneLake 数据索引并搜索到 Elastic 中。 在本文中,我们将利用第 1 部分中学到的知识来创建 OneLake 自定义 Elasticsearch 连接器…...
数据密码解锁之DeepSeek 和其他 AI 大模型对比的神秘面纱
本篇将揭露DeepSeek 和其他 AI 大模型差异所在。 目录 编辑 一本篇背景: 二性能对比: 2.1训练效率: 2.2推理速度: 三语言理解与生成能力对比: 3.1语言理解: 3.2语言生成: 四本篇小结…...
安心即美的生活方式
如果你的心是安定的,那么,外界也就安静了。就像陶渊明说的:心远地自偏。不是走到偏远无人的边荒才能得到片刻清净,不需要使用洪荒之力去挣脱生活的枷锁,这是陶渊明式的中国知识分子的雅量。如果你自己是好的男人或女人…...
基于深度学习的输电线路缺陷检测算法研究(论文+源码)
输电线路关键部件的缺陷检测对于电网安全运行至关重要,传统方法存在效率低、准确性不高等问题。本研究探讨了利用深度学习技术进行输电线路关键组件的缺陷检测,目的是提升检测的效率与准确度。选用了YOLOv8模型作为基础,并通过加入CA注意力机…...
手写防抖函数、手写节流函数
文章目录 1 手写防抖函数2 手写节流函数 1 手写防抖函数 函数防抖是指在事件被触发n秒后再执行回调,如果在这n秒内事件又被触发,则重新计时。这可以使用在一些点击请求的事件上,避免因为用户的多次点击向后端发送多次请求。 function debou…...
UE 导入sbsar插件
Substance 3D 插件支持直接在 Unreal Engine 5 和 Unreal Engine 4 中使用 Substance 材质。无论您是在处理游戏、可视化,还是在移动设备、桌面或 XR 上进行部署,Substance 都能提供独特的体验,并优化功能以提高生产力。 Substance 资源平台…...
pytorch实现简单的情感分析算法
人工智能例子汇总:AI常见的算法和例子-CSDN博客 在PyTorch中实现中文情感分析算法通常涉及以下几个步骤:数据预处理、模型定义、训练和评估。下面是一个简单的实现示例,使用LSTM模型进行中文情感分析。 1. 数据预处理 首先,我…...
Baklib揭示内容中台实施最佳实践的策略与实战经验
内容概要 在当前数字化转型的浪潮中,内容中台的概念日益受到关注。它不再仅仅是一个内容管理系统,而是企业提升运营效率与灵活应对市场变化的重要支撑平台。内容中台的实施离不开最佳实践的指导,这些实践为企业在建设高效内容中台时提供了宝…...
11.[前端开发]Day11-HTML+CSS阶段练习(仿小米和考拉页面)
一、小米穿戴设备(浮动) 完整代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"vie…...
设计模式学习(二)
结构型 适配器模式 定义 它允许将一个类的接口转换成客户端期望的另一个接口。适配器模式通常用于使不兼容的接口能够一起工作。 适配器模式的角色 目标接口(Target):客户端期望的接口。适配者(Adaptee)ÿ…...
【Docker】快速部署 Nacos 注册中心
【Docker】快速部署 Nacos 注册中心 引言 Nacos 注册中心是一个用于服务发现和配置管理的开源项目。提供了动态服务发现、服务健康检查、动态配置管理和服务管理等功能,帮助开发者更轻松地构建微服务架构。 仓库地址 https://github.com/alibaba/nacos 步骤 拉取…...
大白话讲清楚embedding原理
Embedding(嵌入)是一种将高维数据(如单词、句子、图像等)映射到低维连续向量的技术,其核心目的是通过向量表示捕捉数据之间的语义或特征关系。以下从原理、方法和应用三个方面详细解释Embedding的工作原理。 一、Embe…...
pandas中的apply方法使用
apply 用于对 DataFrame 或 Series 中的数据进行逐行或逐列的操作。它可以接受一个函数(通常是 lambda 函数或自定义函数),并将该函数应用到每一行或每一列上。apply语法: DataFrame.apply(func, axis0, rawFalse, result_typeNo…...
简单易懂的倒排索引详解
文章目录 简单易懂的倒排索引详解一、引言 简单易懂的倒排索引详解二、倒排索引的基本结构三、倒排索引的构建过程四、使用示例1、Mapper函数2、Reducer函数 五、总结 简单易懂的倒排索引详解 一、引言 倒排索引是一种广泛应用于搜索引擎和大数据处理中的数据结构,…...
Nginx知识
nginx 精简的配置文件 worker_processes 1; # 可以理解为一个内核一个worker # 开多了可能性能不好events {worker_connections 1024; } # 一个 worker 可以创建的连接数 # 1024 代表默认一般不用改http {include mime.types;# 代表引入的配置文件# mime.types 在 ngi…...
CNN的各种知识点(三):有关于VGG16 的结构展开的问题(1)
有关于VGG16 的结构展开的问题(1) 1. VGG16 的原生结构2. model.avgpool 的作用原生 VGG16 中没有 avgpool 层?代码中的 model.avgpool 是什么? 3. model.classifier 的作用原生 VGG16 的 classifier用户代码中的 classifier 4. 为…...
vue3中el-input无法获得焦点的问题
文章目录 现象两次nextTick()加setTimeout()解决结论 现象 el-input被外层div包裹了,设置autofocus不起作用: <el-dialog v-model"visible" :title"title" :append-to-bodytrue width"50%"><el-form v-model&q…...
sqli-labs靶场通关
sqli-las通关 mysql数据库5.0以上版本有一个自带的数据库叫做information_schema,该数据库下面有两个表一个是tables和columns。tables这个表的table_name字段下面是所有数据库存在的表名。table_schema字段下是所有表名对应的数据库名。columns这个表的colum_name字段下是所有…...
深度学习深度解析:从基础到前沿
引言 深度学习作为人工智能的一个重要分支,通过模拟人脑的神经网络结构来进行数据分析和模式识别。它在图像识别、自然语言处理、语音识别等领域取得了显著成果。本文将深入探讨深度学习的基础知识、主要模型架构以及当前的研究热点和发展趋势。 基础概念与数学原理…...
sobel边缘检测算法
人工智能例子汇总:AI常见的算法和例子-CSDN博客 Sobel边缘检测算法是一种用于图像处理中的边缘检测方法,它能够突出图像中灰度变化剧烈的地方,也就是边缘。该算法通过计算图像在水平方向和垂直方向上的梯度来检测边缘,梯度值越大…...
LeetCode 349: 两个数组的交集
LeetCode 349: 两个数组的交集 - C语言 问题描述 给定两个数组 ransomNote 和 magazine,你需要判断 ransomNote 是否可以由 magazine 里的字符构成。每个字符可以使用一次。 解题思路 通过统计 magazine 中每个字符的频次,并与 ransomNote 中字符的需…...
MATLAB的数据类型和各类数据类型转化示例
一、MATLAB的数据类型 在MATLAB中 ,数据类型是非常重要的概念,因为它们决定了如何存储和操作数据。MATLAB支持数值型、字符型、字符串型、逻辑型、结构体、单元数组、数组和矩阵等多种数据类型。MATLAB 是一种动态类型语言,这意味着变量的数…...
c++ list的front和pop_front的概念和使用案例—第2版
在 C 标准库中,std::list 的 front() 和 pop_front() 是与链表头部元素密切相关的两个成员函数。以下是它们的核心概念和具体使用案例: 1. front() 方法 概念: 功能:返回链表中第一个元素的引用(直接访问头部元素&am…...
如何使用SliverList组件
文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了沉浸式状态栏相关的内容,本章回中将介绍SliverList组件.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里介绍的SliverList组件是一种列表类组件,类似我们之前介…...
DIFY源码解析
偶然发现Github上某位大佬开源的DIFY源码注释和解析,目前还处于陆续不断更新地更新过程中,为大佬的专业和开源贡献精神点赞。先收藏链接,后续慢慢学习。 相关链接如下: DIFY源码解析...
搜索引擎友好:设计快速收录的网站架构
本文来自:百万收录网 原文链接:https://www.baiwanshoulu.com/14.html 为了设计一个搜索引擎友好的网站架构,以实现快速收录,可以从以下几个方面入手: 一、清晰的目录结构与层级 合理划分内容:目录结构应…...
2007-2019年各省科学技术支出数据
2007-2019年各省科学技术支出数据 1、时间:2007-2019年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区名称、年份、科学技术支出 4、范围:31省 5、指标解释:科学技术支出是指为促进科学研究、技术开发…...
【数据分析】案例03:当当网近30日热销图书的数据采集与可视化分析(scrapy+openpyxl+matplotlib)
当当网近30日热销图书的数据采集与可视化分析(scrapy+openpyxl+matplotlib) 当当网近30日热销书籍官网写在前面 实验目的:实现当当网近30日热销图书的数据采集与可视化分析。 电脑系统:Windows 使用软件:Visual Studio Code Python版本:python 3.12.4 技术需求:scrapy、…...
DRM系列二:DRM总体介绍
一、简介 DRM,全称Direct Rending Manger。是目前Linux主流的图形显示框架。相比较传统的Framebuffer(FB原生不支持多层合成,不支持VSYNC,不支持DMA-BUF,不支持异步更新,不支持fence机制等等)&…...
步进电机的型号和分类
步进电机的型号和分类通常根据其尺寸、结构、相数、步距角等参数来区分。以下是一些常见的步进电机型号、分类方法以及如何识别它们的指南: 一、常见步进电机型号 步进电机的型号通常由厂家命名,但也有一些通用的命名规则。以下是一些常见的型号系列&am…...
【力扣】15.三数之和
AC截图 题目 思路 这道题如果简单的用暴力三重遍历去做,会超时。所以我们思考假如有三个下标,i,l,r 其中i0(初始),li1 rnums.size()-1 我们固定nums[i]的值,那么就转换为两数之和…...
Redis 基础命令
1. redis 命令官网 https://redis.io/docs/latest/commands/ 2. 在 redis-cli 中使用 help 命令 # 查看 help string 基础命令 keys * # * 代表通配符set key value # 设置键值对del key # 删除键expire key 时间 # 给键设置时间 # -2 代表时间到期了, -1 代表…...
CSES Missing Coin Sum
思路是对数组排序 设 S [ i ] S[i] S[i] 是数组的前缀和 R [ i ] R[i] R[i] 是递增排序后的数组 遍历数组,如果出现 S [ i − 1 ] 1 < R [ i ] S[i - 1] 1 < R[i] S[i−1]1<R[i],就代表S[i - 1] 1是不能被合成出来的数字 因为:…...
Python中的数据类(dataclass):简化类的定义与数据管理
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着Python语言的发展,代码的简洁性与可维护性变得愈发重要。Python 3.7引入的dataclass模块为数据类的定义提供了一种简便而高效的方式,…...
Java线程认识和Object的一些方法ObjectMonitor
专栏系列文章地址:https://blog.csdn.net/qq_26437925/article/details/145290162 本文目标: 要对Java线程有整体了解,深入认识到里面的一些方法和Object对象方法的区别。认识到Java对象的ObjectMonitor,这有助于后面的Synchron…...
使用真实 Elasticsearch 进行高级集成测试
作者:来自 Elastic Piotr Przybyl 掌握高级 Elasticsearch 集成测试:更快、更智能、更优化。 在上一篇关于集成测试的文章中,我们介绍了如何通过改变数据初始化策略来缩短依赖于真实 Elasticsearch 的集成测试的执行时间。在本期中࿰…...
统计学中的样本概率论中的样本
不知道当初谁想的把概率论和数理统计合并,作为一门课。这本身是可以合并,完整的一条线,看这里。但是,作为任课老师应该从整体上交代清楚,毕竟是两个学科,不同的学科合并必然会有各种不协调的问题。 举个最…...
SQL 总结
SQL 总结 引言 SQL(Structured Query Language)是一种用于管理关系数据库的计算机语言。自从1970年代被发明以来,SQL已经成为了数据库管理的基础。本文将对SQL的基本概念、常用命令、高级特性以及SQL在数据库管理中的应用进行总结。 SQL基本概念 数据库 数据库是存储数…...
Openfga 授权模型搭建
1.根据项目去启动 配置一个 openfga 服务器 先创建一个 config.yaml文件 cd /opt/openFGA/conf touch ./config.yaml 怎么配置? 根据官网来看 openfga/.config-schema.json at main openfga/openfga GitHub 这里讲述详细的每一个配置每一个类型 这些配置有…...
【Proteus】NE555纯硬件实现LED呼吸灯效果,附源文件,效果展示
本文通过NE555定时器芯片和简单的电容充放电电路,设计了一种纯硬件实现的呼吸灯方案,并借助Proteus仿真软件验证其功能。方案无需编程,成本低且易于实现,适合电子爱好者学习PWM(脉宽调制)和定时器电路原理。 一、呼吸灯原理与NE555功能分析 1. 呼吸灯核心原理 呼吸灯的…...
DRM系列三:drm core模块入口
本系列文章基于linux 5.15 一、drm_core_init 执行一些drm core的初始化工作 static int __init drm_core_init(void) {int ret;drm_connector_ida_init();idr_init(&drm_minors_idr);drm_memcpy_init_early();ret drm_sysfs_init();if (ret < 0) {DRM_ERROR("…...
Clock Controller of RH850/F1KH-D8, RH850/F1KM-S4, RH850/F1KM-S2
&esmp; 时钟控制器由时钟振荡电路、时钟选择电路、和时钟输出电路组成。 RH850/F1KH、RH850/F1KM单片机的时钟控制器具有以下特点: 六个片上时钟振荡器: 主振荡器(MainOSC),振荡频率分别为8、16、20和24 MHz子振荡器(SubOSC),振荡频率为32.768 kHz*1 100针的产品…...