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协议。


相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
3月前
|
消息中间件 Linux API
centos7 安装rabbitmq自定义版本及配置
centos7 安装rabbitmq自定义版本及配置
|
3月前
|
Java 中间件 测试技术
java依赖冲突解决问题之jar包版本冲突无法通过升降级解决时如何解决
java依赖冲突解决问题之jar包版本冲突无法通过升降级解决时如何解决
|
3月前
|
Java 应用服务中间件 Windows
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
|
17天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
25 4
|
17天前
|
Java Linux Windows
如何查看已安装的 Java 版本
要查看已安装的 Java 版本,打开命令提示符或终端,输入 `java -version`,回车后即可显示当前系统中 Java 的版本信息。
|
17天前
|
Ubuntu Java Linux
如何检查 Java 版本是否兼容
要检查Java版本是否兼容,可在命令行输入“java -version”查看当前安装的Java版本,然后对比目标应用所需的Java版本,确保其满足要求。
|
1月前
|
缓存 Java Maven
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
如何解决Java项目中因JDK版本不匹配导致的编译错误,包括修改`pom.xml`文件、调整项目结构、设置Maven和JDK版本,以及清理缓存和重启IDEA。
45 1
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
|
1月前
|
Java Docker 容器
java版本学习网站又添加了一个libgdx模块
java版本学习网站之前添加了docker,想了想还是再把libgdx添加进去吧。
29 3
|
1月前
|
分布式计算 Java Hadoop
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
61 1
|
1月前
|
Java Maven Spring
查看springboot版本支持最高的java版本
截至最近更新,Spring Boot 3.0及以上版本支持的最高Java版本为Java 17。鉴于技术的不断演进,建议直接参考Spring Boot的官方文档获取最准确的支持信息,因为这些版本兼容性可能会随着新版本的发布而有所变化。选择与你的Spring Boot版本相匹配的Java版本,可以确保充分利用框架特性,同时保证项目的稳定性和前瞻性。
44 0