【tower-boot 系列】开源RocketMQ和阿里云rockerMq 4.x和5.x集成 (一)

RocketMQ 简单介绍

阿里云rockerMq 4.x和5.x集成

一、云平台创建实例

参考文档:
阿里云api

阿里云 创建实例

二、skd集成思路

公司用的RocketMQ一般是自建开源apache的RocketMQ和上阿里云的RocketMQ,目前阿里云支持4.x和5.x版本

项目集成思路:

1、集成阿里RocketMQ 两个版本 4.x和5.x 支持版本配置和开源apache的RocketMQ集成

2、RocketProperties 单配置适用多版本集成

3、RocketConsumer 消费者注解,支持多版本集成(消费组监听器继承实现可以不一样,注解一致)

4、RocketMessageProducer 生产者接口,支持多版本集成,根据配置版本自动适配

注:这个是一个持续集成优化过程,需要不停磨练

三、根据RocketConsumer注解,动态监听器实现

1、核心逻辑代码:

扫描包注解,根据配置版本号走不同的,消费组创建

java 复制代码
        String packageName = properties.getPackageName(); // 扫描包路径
        ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
        scanner.addIncludeFilter(new AnnotationTypeFilter(RocketConsumer.class));
        Set<BeanDefinition> candidates = scanner.findCandidateComponents(packageName);
        for (BeanDefinition beanDefinition : candidates) {
            try {
                Integer versions = properties.getVersions();
                if (Objects.equals(RockerMqVersions.ALI_4.getCode(), versions)) {
                    onsRocketMQConsumerClient.start(beanDefinition);
                }

                if (Objects.equals(RockerMqVersions.ALI_5.getCode(), versions)) {
                    rocketMQConsumerClient.start(beanDefinition);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

2、消费组push 用法示例

版本4.x 写法

java 复制代码
@Slf4j
@Component
@RocketConsumer(topic = "PRODUCER_TOPIC", consumerGroup = "PRODUCER_GROUP")
public class Push4MQConsumer implements MessageListener {

    @Autowired
    private UserService userService;

    @Override
    public Action consume(Message message, ConsumeContext consumeContext) {
        String body = new String(message.getBody());
        log.info("TestMQConsumer:" + body + "user:" + userService.getUserId());
        return Action.CommitMessage;
    }
}

版本5.x 写法

java 复制代码
@Slf4j
@Component
@RocketConsumer(topic = "PRODUCER_TOPIC", consumerGroup = "PRODUCER_GROUP")
public class TestMQConsumer implements MessageListener {

    @Autowired
    private UserService userService;

    @Override
    public ConsumeResult consume(MessageView messageView) {
        String body = StandardCharsets.UTF_8.decode(messageView.getBody()).toString();
        log.info("TestMQConsumer:" + body + "user:" + userService.getUserId());
        return ConsumeResult.SUCCESS;
    }
}

五、RocketMessageProducer 生产发送

目前只写5.x 写法,后面持续优化

普通消息

java 复制代码
RocketMsg rocketMsg = new RocketMsg();
rocketMsg.setBody("hxl测试发送");
rocketMessageProducer.sendMessage("PRODUCER_TOPIC", null, rocketMsg);
return ApiResult.success();

延迟消息

java 复制代码
RocketMsg rocketMsg = new RocketMsg();
rocketMsg.setBody("延迟消息发送发送");
rocketMessageProducer.sendMessage("DELAY_TOPIC", null, 5 * 60L, rocketMsg);

# github 地址:
[https://github.com/sanxiaoshitou/tower-boot](https://github.com/sanxiaoshitou/tower-boot)
相关推荐
毕设源码-邱学长4 小时前
【开题答辩全过程】以 基于Java的学校住宿管理系统的设计与实现为例,包含答辩的问题和答案
java·开发语言
NocoBase5 小时前
【2.0 教程】第 1 章:认识 NocoBase ,5 分钟跑起来
数据库·人工智能·开源·github·无代码
NocoBase5 小时前
开源项目管理工具选型指南(2026年最新)
人工智能·开源·无代码
兑生5 小时前
【灵神题单·贪心】1481. 不同整数的最少数目 | 频率排序贪心 | Java
java·开发语言
daidaidaiyu5 小时前
一文学习 Spring 声明式事务源码全流程总结
java·spring
AI周红伟6 小时前
周红伟:《OpenClaw安全防控:OpenClaw++Skills智能体安全部署、实操和企业应用实操》
人工智能·阿里云·云计算·腾讯云·openclaw
零雲7 小时前
java面试:了解抽象类与接口么?讲一讲它们的区别
java·开发语言·面试
老星*8 小时前
Cal.com:开源日程预约管理平台,Calendly的最佳替代方案
开源
左左右右左右摇晃9 小时前
Java并发——synchronized锁
java·开发语言
sxlishaobin10 小时前
Java I/O 模型详解:BIO、NIO、AIO
java·开发语言·nio