RocketMQ-JAVA客户端不同版本接入方式

简介: RocketMQ4.0 RocketMQ5.0 JAVA接入 spring springboot

RocketMQ是阿里巴巴研发的消息中间件,由于RocketMQ4.0 5.0在协议等方面的变化,本文主要针对Java客户端接入,列举在4.0、5.0使用普通java接入、SpringBoot接入等方式。


在接入之前,首先我们来了解RocketMQ5.0和4.0在代码接入上的差异性。

版本

协议

支持接入方式

4.0

remoting

tcp、http

5.0

remoting、GRPC

tcp

  • RocketMQ4.0支持remoting协议,支持通过tcp和http的方式接入,推荐通过tcp方式接入;
  • RocketMQ5.0支持remoting、GRPC协议,与4.0最大的区别就是支持了GRPC,以更好的与开源社区对齐,但仅支持通过tcp接入;


普通接入

普通接入即通过new对象的方式实现,这种情况下需要注意不应每次都new对象,容易耗尽tcp连接资源,引发broken pipe等报错。

RocketMQ4.0

普通接入请参考:tcp接入http接入

RocketMQ5.0

普通接入请参考:链接


Springboot接入

RocketMQ4.0

官方接入

spring集成可参考:链接

通过rocketmq-spring-boot-starter接入

即通过以下jar接入,推荐使用2.2.1以后的版本

<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>${version}</version></dependency>

rocketmq-spring-boot-starter依赖的是rocketmq-client包,所以他是一个支持remoting协议的包(rocketmq-client支持remoting协议,rocketmq-client-java支持remoting和grpc协议

image.png

接入方式如下:

  1. 修改application.prpoerties,如下所示:
#NAMESRV_ADDR, 通过"实例管理--获取接入点信息--TCP协议接入点"获取。#如果使用当前Demo访问阿里云RocketMQ 4.0系列实例,接入点应该是类似这样的格式  http://MQ_INST_XXX:xxx,注意!!!一定要有http协议头#如果使用当前Demo访问阿里云RocketMQ 5.0系列实例,接入点应该是类似这样的格式  rmq-cn-xxx.xx:xxx,注意!!!一定不要自己添加http协议头rocketmq.name-server=#如果使用当前Demo访问阿里云RocketMQ 4.0系列实例,请设置访问的阿里云账号的AccessKeyId。#如果使用当前Demo访问阿里云RocketMQ 5.0系列实例,请设置实例详情页获取的实例用户名,不要设置阿里云账号的AccessKeyId。rocketmq.consumer.access-key=#如果使用当前Demo访问阿里云RocketMQ 4.0系列实例,请设置访问的阿里云账号的AccessKeySecret。#如果使用当前Demo访问阿里云RocketMQ 5.0系列实例,请设置实例详情页获取的实例密码,不要设置阿里云账号的AccessKeySecret。rocketmq.consumer.secret-key=# 注意,4.0实例需要在控制台实例详情中查看是否有命名空间,无命名空间则不需要填写此项rocketmq.consumer.instance-name=rmq-cn-pe33gx4so0grocketmq.producer.group=group2#如果使用当前Demo访问阿里云RocketMQ 4.0系列实例,请设置访问的阿里云账号的AccessKeyId。#如果使用当前Demo访问阿里云RocketMQ 5.0系列实例,请设置实例详情页获取的实例用户名,不要设置阿里云账号的AccessKeyId。rocketmq.producer.access-key=#如果使用当前Demo访问阿里云RocketMQ 4.0系列实例,请设置访问的阿里云账号的AccessKeySecret。#如果使用当前Demo访问阿里云RocketMQ 5.0系列实例,请设置实例详情页获取的实例密码,不要设置阿里云账号的AccessKeySecret。rocketmq.producer.secret-key=# 默认发送超时时间,可修改rocketmq.producer.send-message-timeout=30000
  1. producer代码示例:
@RestControllerpublicclassDemoController {
@AutowiredprivateRocketMQTemplaterocketMQTemplate;
@GetMapping("/testDelay")
publicvoidtest() {
Message<String>msg=MessageBuilder.withPayload("Hello,RocketMQ").build();
// 发送延迟消息,注意topic要先创建好SendResultsendResult=rocketMQTemplate.syncSendDeliverTimeMills("topic1", msg, System.currentTimeMillis() +100000);
System.out.println(JSON.toJSONString(sendResult));
    }
@GetMapping("/testSend")
publicvoidtestSend() {
Message<String>msg=MessageBuilder.withPayload("Hello,RocketMQ").build();
// 发送普通消息,注意topic要先创建好   SendResultsendResult=rocketMQTemplate.send("simple-topic", msg);
System.out.println(JSON.toJSONString(sendResult));
    }
}
  • consumer代码示例:
@Component// 需要注意注解中的消费方式consumeMode(并发、顺序)、消费类型messageModel(集群、广播),需要与控制台设置的保持一致,同时注意topic和group需提前创建好@RocketMQMessageListener(topic="simple-topic", selectorExpression="*", consumerGroup="simple-group",
messageModel=MessageModel.CLUSTERING, consumeMode=ConsumeMode.CONCURRENTLY)
publicclassSimpleConsumerimplementsRocketMQListener<MessageExt> {
@OverridepublicvoidonMessage(MessageExtmessage) {
log.info("simple msg:{}, body:{}", message.getMsgId(), message.getBody());
    }
}


RocketMQ5.0

官方接入

RocketMQ5.0阿里云官方client并未提供spring bean方式接入的示例,在普通接入中5.0的代码示例提供了在生产者和消费者initMethod阶段的单例实现demo,但并未提供destroyMethod阶段的demo,如果需要用官方范例接入的话需要自行在spring生命周期中实现destory,否则可能会在应用发布、重启等过程中导致异常报错。

通过rocketmq-spring-boot-starter接入

与RocketMQ4.0的接入方式一致,但需要注意的是,此种接入方式使用的是remoting协议(非5.0新增的grpc协议),只是5.0兼容了remoting协议。


相关实践学习
5分钟轻松打造应对流量洪峰的稳定商城交易系统
本实验通过SAE极速部署一个微服务电商商城,同时结合RocketMQ异步解耦、削峰填谷的能力,带大家体验面对流量洪峰仍旧稳定可靠的商城交易系统!
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
2天前
|
Java 17 及以上版本核心特性在现代开发实践中的深度应用与高效实践方法 Java 开发实践
本项目以“学生成绩管理系统”为例,深入实践Java 17+核心特性与现代开发技术。采用Spring Boot 3.1、WebFlux、R2DBC等构建响应式应用,结合Record类、模式匹配、Stream优化等新特性提升代码质量。涵盖容器化部署(Docker)、自动化测试、性能优化及安全加固,全面展示Java最新技术在实际项目中的应用,助力开发者掌握现代化Java开发方法。
20 1
MCP客户端调用看这一篇就够了(Java版)
本文详细介绍了MCP(Model Context Protocol)客户端的开发方法,包括在没有MCP时的痛点、MCP的作用以及如何通过Spring-AI框架和原生SDK调用MCP服务。文章首先分析了MCP协议的必要性,接着分别讲解了Spring-AI框架和自研SDK的使用方式,涵盖配置LLM接口、工具注入、动态封装工具等步骤,并提供了代码示例。此外,还记录了开发过程中遇到的问题及解决办法,如版本冲突、服务连接超时等。最后,文章探讨了框架与原生SDK的选择,认为框架适合快速构建应用,而原生SDK更适合平台级开发,强调了两者结合使用的价值。
3010 31
MCP客户端调用看这一篇就够了(Java版)
家政系统源码,java版本
这是一款基于SpringBoot后端框架、MySQL数据库及Uniapp移动端开发的家政预约上门服务系统。
103 6
家政系统源码,java版本
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
295 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
Java获取客户端IP问题:返回127.0.0.1
总结:要解决Java获取客户端IP返回127.0.0.1的问题,首先要找出原因,再采取合适的解决方案。请参考上述方案来改进代码,确保在各种网络环境下都能正确获取客户端IP地址。希望本文对您有所帮助。
191 25
4步实现状态机驱动的MQTT客户端,快速接入OneNet (1)
本文介绍了基于状态机驱动的MQTT客户端快速接入OneNet平台的实现方法,通过4步完成模块设计。文章以开源项目`Sparrow`为基础,引入`OneNetMqtt`业务模块,采用事件驱动模型和双层状态机设计,实现设备状态管理、消息处理及定时任务等功能。模块分为三层:`OneNetManager`负责核心逻辑,`OneNetDevice`管理设备信息,`OneNetDriver`处理Socket与MQTT通信。验证结果显示设备连接、数据上报及下线功能正常,稳定性良好。该设计简化了复杂条件判断,增强了系统灵活性与可扩展性,适用于实际项目参考。文末提供源码获取方式,助力读者实践与学习。
271 73
centos7 安装rabbitmq自定义版本及配置
centos7 安装rabbitmq自定义版本及配置
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
如何解决Java项目中因JDK版本不匹配导致的编译错误,包括修改`pom.xml`文件、调整项目结构、设置Maven和JDK版本,以及清理缓存和重启IDEA。
392 2
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
|
8月前
|
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
634 4
如何查看已安装的 Java 版本
要查看已安装的 Java 版本,打开命令提示符或终端,输入 `java -version`,回车后即可显示当前系统中 Java 的版本信息。
2848 1

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问