当前位置: 首页 > news >正文

Spring Cloud Stream整合RocketMQ

Spring Cloud Stream整合RocketMQ

这里书接上回,默认你已经搭建好了RocketMQ主从异步集群,前面文章已经介绍过搭建方法。

1、Spring Cloud Stream介绍

Spring Cloud Stream是一个框架,用于构建与共享消息系统连接的高度可扩展的事件驱动微服务。

官网:https://spring.io/projects/spring-cloud-stream

image-20240601120416055

该框架提供了一个灵活的编程模型,该模型基于已经建立和熟悉的Spring习惯用法和最佳实践,包括对持久pub/sub语义、消费者组和有状态分区的支持。

image-20240601120020593

Spring Cloud Stream的核心构建块是:

  • Destination Binders:负责提供与外部消息传递系统集成的组件。
  • Destination Bindings:外部消息系统和最终用户提供的应用程序代码(生产者/消费者)之间的桥梁。
  • Message:生产者和消费者用来与目标绑定器(以及通过外部消息系统的其他应用程序)进行通信的规范数据结构。

2、生产者

2.1 引入依赖

<dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-stream-rocketmq</artifactId><version>2.2.2.RELEASE</version><exclusions><exclusion><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId></exclusion><exclusion><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-acl</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><version>4.7.1</version></dependency><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-acl</artifactId><version>4.7.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

注意,RocketMQ官方维护的Spring-Cloud-Stream依赖中的rocketmq版本为4.4,需要排出后加入4.7.1的依。

2.2 编写配置文件

spring:application:name: my-spring-cloud-rocketmq-producercloud:stream:bindings:output:destination: TopicTestrocketmq:binder:name-server: 192.168.159.34:9876
server:port: 8080

2.3 启动类打上注解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.messaging.Source;@EnableBinding(Source.class)
@SpringBootApplication
public class MySpringCloudRocketmqProducerApplication {public static void main(String[] args) {SpringApplication.run(MySpringCloudRocketmqProducerApplication.class, args);}
}

其中,@EnableBinding(Source.class)指向配置文件的output参数。

2.4 编写生产者程序

import org.apache.rocketmq.common.message.MessageConst;
import org.springframework.cloud.stream.messaging.Source;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageHeaders;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Component;import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;@Component
public class MyProducer {@Resourceprivate Source source;public void sendMessage(String msg){//封装消息头Map<String,Object> headers=new HashMap<>();headers.put(MessageConst.PROPERTY_TAGS,"TagA");MessageHeaders messageHeaders=new MessageHeaders(headers);//创建消息对象Message<String> message = MessageBuilder.createMessage(msg, messageHeaders);//发送消息source.output().send(message);}
}

2.5 编写单元测试发送消息

@SpringBootTest
class MySpringCloudRocketmqProducerApplicationTests {@Autowiredprivate MyProducer producer;@Testvoid contextLoads() {producer.sendMessage("hello,spring cloud stream message");}}

3、消费者

3.1 引入依赖

与生产者相同。

3.2 编写配置文件

spring:application:name: my-spring-cloud-rocketmq-consumercloud:stream:bindings:# input消费者input:destination: TopicTestgroup: spring-cloud-stream-consumer-group# 配置RocketMQrocketmq:binder:name-server: 192.168.159.34:9876
server:port: 8081

3.3 启动类打上注解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.messaging.Sink;@EnableBinding(Sink.class)
@SpringBootApplication
public class MySpringCloudRocketmqConsumerApplication {public static void main(String[] args) {SpringApplication.run(MySpringCloudRocketmqConsumerApplication.class, args);}}

其中@EnableBinding(Sink.class)指向配置文件的input参数。

3.4 编写消费者程序

import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.cloud.stream.messaging.Sink;
import org.springframework.stereotype.Component;@Component
public class MyConsumer {@StreamListener(Sink.INPUT)public void processMessage(String message){System.out.println("收到的消息:"+message);}
}

先启动消费者,使用单元测试发送消息。

image-20240603111535498

相关文章:

Spring Cloud Stream整合RocketMQ

Spring Cloud Stream整合RocketMQ 这里书接上回&#xff0c;默认你已经搭建好了RocketMQ主从异步集群&#xff0c;前面文章已经介绍过搭建方法。 1、Spring Cloud Stream介绍 Spring Cloud Stream是一个框架&#xff0c;用于构建与共享消息系统连接的高度可扩展的事件驱动微服…...

Web前端浪漫源码:编织梦想与爱的交织乐章

Web前端浪漫源码&#xff1a;编织梦想与爱的交织乐章 在数字世界的广袤宇宙中&#xff0c;Web前端浪漫源码犹如一段段秘密的旋律&#xff0c;编织着梦想与爱的交织乐章。它们不仅是技术的结晶&#xff0c;更是情感的载体&#xff0c;将浪漫与创意融入每一个像素和每一行代码之…...

【云岚到家】-day02-4-我的账户-实名认证

【云岚到家】-day02-4-我的账户-实名认证 1 我的账户设置-实战1.1 配置OSS1.2 需求分析1.2.1 服务端设置银行账户1.2.2 机构端设置银行账户1.2.3 表结构设计1.2.4 表结构相关的controller、service、mapper、entity 1.3 服务端设置银行账户接口设计1.3.1 新增或更新银行账号信息…...

MySQL复习题(期末考试)

MySQL复习题&#xff08;期末考试&#xff09; 1.MySQL支持的日期类型&#xff1f; DATE,DATETIME,TIMESTAMP,TIME,TEAR 2.为表添加列的语法&#xff1f; alter table 表名 add column 列名 数据类型; 3.修改表数据类型的语法是&#xff1f; alter table 表名 modify 列名 新…...

利用DVWA演示文件上传漏洞获取网站shell权限(二)

文件上传漏洞是网络安全中常见的一种漏洞类型&#xff0c;攻击者可以利用该漏洞上传恶意文件到服务器上&#xff0c;从而获得对网站的远程控制权限。本文将以DVWA (Damn Vulnerable Web Application) 为例&#xff0c;演示如何利用文件上传漏洞的Medium级别设置&#xff0c;绕过…...

Java---BigInteger和BigDecimal和枚举

1.简介 1.BigInteger可以支持任意长度的整数 2.BigDecimal可以支持任意精度的浮点数 3.用来做精确计算 2.创建方式 new BigInteger(); new BigInteger(参数1,进制)&#xff1a;可以将不同进制转成10进制显示 new BigDecimal(); BigInteger.valueOf(); BigDecimal.valueOf();…...

mybatis数据批量更新

1、mybatis批量更新mapper <update id"updateBatchById"><foreach collection"list" item"s" separator";">updatetableNamesetname #{name},whereid #{id}</foreach> </update>通过在数据库连接URL中指定…...

自动驾驶#芯片-1

概述 汽车是芯片应用场景之一&#xff0c;汽车芯片需要具备车规级。  车规级芯片对加工工艺要求不高&#xff0c;但对质量要求高。需要经过的认证过程&#xff0c;包括质量管理标准ISO/TS 16949、可靠性标准 AEC-Q100、功能安全标准ISO26262等。  汽车内不同用途的芯片要求…...

【保姆级讲解下QT6.3】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

windows安装conda

1 Conda简介 Conda 是一个开源的软件包管理系统和环境管理系统&#xff0c;用于安装多个版本的软件包及其依赖关系&#xff0c;并在它们之间轻松切换。Conda 是为 Python 程序创建的&#xff0c;适用于 Linux&#xff0c;OS X 和Windows&#xff0c;也可以打包和分发其他软…...

ubuntu设置GPU功率

前言 上次发了一篇文章&#xff0c;我使用脚本自动根据GPU温度调整服务器风扇转速 但是我实测之后&#xff0c;发现这个方法还是压不住我GPU的温度&#xff0c;暂时不清楚什么原因 所以我准备把GPU功耗压低 先看看gpu的功耗限制 nvidia-smi -q -d POWER使用上面的命令会输出…...

[发布]嵌入式系统远程测控软件-基于Qt

目录 一. 引言二. 软件功能2.1 原理2.2 软件功能2.3 运行环境 三. 软件操作使用3.1 软件界面3.2 软件功能使用详解3.2.1 连接3.2.2 数据监测&#xff08;串口示波器&#xff09;3.2.3 数据修改3.2.4 数据保存 3.3 软件的硬件连接 四. 通信协议——STM32移植篇4.1 通信协议4.2 S…...

【数据结构】查找(顺序查找、二分查找、索引顺序查找、二叉排序树、平衡排序树、B树、B+树、哈希表)

目录 数据结构——查找何为查找1. 查找表2. 关键字3. 查找方法效果评价指标——平均查找长度ASL(Average Search Length) 静态查找表1.顺序查找2.二分查找二分查找判定树 3.静态查找表—索引顺序表的查找索引顺序查找表的算法原理&#xff1a; 动态查找树表1. 二叉排序树2. 二叉…...

远程连接路由器:方法大全与优缺点解析

远程连接路由器的方式主要有以下几种&#xff0c;以下是每种方式的详细说明及其优缺点&#xff1a; 使用Web浏览器登录 方法&#xff1a;通过配置路由器的远程管理功能&#xff0c;允许用户通过互联网浏览器访问路由器的管理界面。用户只需输入路由器的公网IP地址或域名&#…...

NI USB-6009 DAQ采集卡拆解

所需设备&#xff1a; 1、NI USB-6009采集卡&#xff1b; 2、逻辑分析仪&#xff1b; NI USB-6009采集卡全貌&#xff1a; 性能参数&#xff1a; 内部照片&#xff1a; ADC芯片指标&#xff1a; 接线图&#xff1a; 差分模式采样&#xff1a; 采集过程中的SPI总线数据监控&a…...

详细分析Mysql临时变量的基本知识(附Demo)

目录 前言1. 用户变量2. 会话变量 前言 临时变量主要分为用户变量和会话变量 1. 用户变量 用户变量是特定于会话的&#xff0c;在单个会话内可以在多个语句中共享 以 符号开头在 SQL 语句中使用 SET 语句或直接在查询中赋值 声明和赋值 SET var_name value; -- 或者 SE…...

JS的五种事件函数,各自应用场景又分别是什么

在JavaScript中&#xff0c;常用的五种事件函数包括&#xff1a; 1. onclick&#xff1a;当用户点击某个元素时触发&#xff0c;适用于处理按钮点击、链接点击等场景。 2. onkeydown&#xff1a;当用户按下某个键盘的按键时触发&#xff0c;适用于处理键盘输入相关的操作&#…...

电脑想加个WIFI功能,怎么选!

在快速发展的物联网和智能家居时代,Wi-Fi模块作为连接各类智能设备与互联网的桥梁,其重要性不言而喻。而为了让这些模块能够适应各式各样的应用场景,不同的接口技术应运而生。今天,我们就来深入浅出地探讨几种常见的Wi-Fi模块接口,包括它们的工作原理、特点以及适用场景,…...

机器学习——决策树

决策树 决策树可以理解为是一颗倒立的树&#xff0c;叶子在下端&#xff0c;根在最上面 一层一层连接的是交内部节点&#xff0c;内部节点主要是一些条件判断表达式&#xff0c;叶子叫叶节点&#xff0c;叶节点其实就是最终的预测结果&#xff0c;那么当输入x进去&#xff0c;…...

弘君资本:苹果股价暴涨,创历史新高!

当地时间6月11日&#xff0c;美股三大指数涨跌纷歧&#xff0c;标普500指数与纳指再创新高。 到收盘&#xff0c;道指跌0.31%&#xff0c;纳指涨0.88%&#xff0c;标普500指数涨0.27%。 苹果大涨逾7%创前史新高。美联储开端召开6月货币方针会议&#xff0c;周三发布利率决定。…...

web前端拖拽工具:探索其复杂性、困惑度与爆发度

web前端拖拽工具&#xff1a;探索其复杂性、困惑度与爆发度 在Web前端开发中&#xff0c;拖拽功能是一项常见且复杂的需求。拖拽工具可以帮助开发者更高效地实现这一功能&#xff0c;但同时也带来了一定的困惑和挑战。本文将从四个方面、五个方面、六个方面和七个方面对Web前端…...

Web前端数据驱动视图的深度解析

Web前端数据驱动视图的深度解析 在Web前端开发中&#xff0c;数据驱动视图的概念日渐重要&#xff0c;它不仅改变了传统的开发模式&#xff0c;更使得页面动态化和交互性得到了极大的提升。然而&#xff0c;对于许多初学者和开发者来说&#xff0c;如何深入理解和应用这一概念…...

HTML5的新语义化标签

HTML5 引入了一系列新的语义化标签&#xff0c;这些标签为网页内容提供了更明确的含义&#xff0c;有助于改善网页的可访问性和搜索引擎优化&#xff08;SEO&#xff09;。以下是一些主要的 HTML5 语义化标签&#xff1a; <article>&#xff1a; 表示页面、应用或网站中…...

周一美股集体低开后转涨,早盘仅道指小幅下跌,英伟达跌超3%后转涨超1%

美国非农就业报告发布“次日”&#xff0c;三大股指低开&#xff0c;但早盘均成功转涨。美股七姐妹涨跌各异&#xff0c;苹果WWDC大会今晚开幕&#xff0c;但早盘转跌&#xff0c;一度跌超1%&#xff1b;1拆10股正式生效的英伟达盘初曾跌超3.2%&#xff0c;开盘1.5小时内首次转…...

Phybers:脑纤维束分析软件包

摘要 本研究提供了一个用于分析脑纤维束数据的Python库(Phybers)。纤维束数据集包含由表示主要白质通路的3D点组成的流线(也称为纤维束)。目前已经提出了一些算法来分析这些数据&#xff0c;包括聚类、分割和可视化方法。由于流线的几何复杂性、文件格式和数据集的大小(可能包…...

手机丢失不惊慌,华为手机已升级至楼层级设备查找!

出门总是丢三落四&#xff0c;手机丢了怎么办&#xff1f;不要怕&#xff0c;只要你的华为手机升级至云空间新版本&#xff0c;就可以进行楼层级设备查找&#xff0c;现在可以查看到具体的楼层了&#xff01; 之前有手机丢失过的朋友&#xff0c;肯定有相似的经历&#xff0c…...

SpringBoot 的多配置文件

文章目录 SpringBoot 的多配置文件spring.profiles.active 配置Profile 和 ActiveProfiles 注解 SpringBoot 的多配置文件 spring.profiles.active 配置 默认情况下&#xff0c;当你启动 SpringBoot 项目时&#xff0c;会在日志中看到如下一条 INFO 信息&#xff1a; No act…...

[Java基础揉碎]网络相关概念

目录 网络通信 网络 ip地址 ​编辑 域名 ​编辑 网络协议 TCP和UDP 网络编程比较重要的的InetAddress类 Socket ​编辑 tcp字节流编程 案例一 案例二​编辑 案例三 网络上传文件 ​编辑​编辑 ​编辑 netstat tcp网络通信客户端也是通过端口和服务端进行通讯的…...

UE5 Sequencer 使用指导 - 学习笔记

https://www.bilibili.com/video/BV1jG411L7r7/?spm_id_from333.337.search-card.all.click&vd_source707ec8983cc32e6e065d5496a7f79ee6 Sequencer 01 1.1 调整视口 调整窗口数量 调整视口类型为Cinematic视口 视口显示网格&#xff0c;或者条件参考线 1.2 关卡动画与…...

Web前端项目源码:深入解析与未来探索

Web前端项目源码&#xff1a;深入解析与未来探索 Web前端项目源码&#xff0c;如同隐藏在数字世界中的宝藏&#xff0c;蕴含着丰富的技术与智慧。它是构建现代网页应用的核心&#xff0c;也是实现用户交互和界面呈现的关键所在。本文将从四个方面、五个方面、六个方面和七个方…...

网站怎么做脚注/北京优化靠谱的公司

打开Eclipse下该文件&#xff1a;\configuration\.settings\org.eclipse.ui.ide.prefs 删除&#xff1a;“RECENT_WORKSPACES” 后面不用的工作空间。转载于:https://www.cnblogs.com/ace-9527/p/4957975.html...

枣庄市庄里水库建设管理处网站/网络视频营销

CPrimer第五版 习题答案 【总目录】&#xff1a;https://blog.csdn.net/Dust_Evc/article/details/114334124 练习4.1 表达式 5 10 * 20 / 2 的求值结果是多少&#xff1f; 105。 练习4.2 根据4.12节中的表&#xff0c;在下述表达式的合理位置添加括号&#xff0c;使得添加括…...

手机端网站模板/湖南百度seo排名点击软件

近期&#xff0c;全球知名的市场研究公司Forrester&#xff0c;通过对包括阿里云在内的全球领先区块链企业进行调研&#xff0c;发布了区块链技术和市场分析报告&#xff0c;为企业如何基于区块链构建分布式信任体系、打造和增强数字化生态系统提供了一系列前瞻性和实用型的建议…...

如何建设一个专业的网站/群排名优化软件

这题水就不用说了 只是要注意在控制高和宽的时候都要加2 代码 #include <stdio.h>voidprint ( intwidth,intheight ){for( inti 1; i <height 2; i ) {for( intj 1; j <width 2; j )if( ( i 1||i height 2) )if( j 1||j width 2) printf ( "");elseprint…...

关闭网站弹窗代码/厦门网站关键词推广

PHP怎么实现的根据银行卡号判断是哪个银行&#xff1f;提问&#xff1a;PHP怎么实现的根据银行卡号判断是哪个银行&#xff1f;回答如下&#xff1a;bankList.php的内容会写在下面。请全选其中所有数据后&#xff0c;另存为bankList.php文件使用。header(Content-type:text/htm…...

藁城网站建设哪家好/会计培训班哪个机构比较好

/*请为原作者打个标记。出自&#xff1a;珍惜少年时*/通过该关卡的学习我掌握到了1.如何灵活的运用mysql里的MID、ASCII、length、等函数2.布尔型盲注的认识3.哦&#xff0c;对了还有。程序是从0开始的&#xff0c;limit的时候要从0开始。{0,1}该文就是布尔型盲注盲注又分为了以…...