第三篇:SpringBoot整合RocketMQ实战+实现原理

📢 技术人必备!关注我的公众号 👉 「老王的技术时光」

🚀 每天分享:最新技术干货 | 实战经验 | 行业趋势 | 个人成长
💡 助你提升:编程技巧 | 架构设计 | 面试心得 | 学习方法

👉 立即关注,订阅获取每周更多精彩内容,持续干货,等你来拿!
🔗 点击这里查看公众号精选文章
🔗 本文公众号链接


一、快速实战:使用Spring Boot与RocketMQ集成

在本节中,我们将通过Spring Boot快速创建一个RocketMQ客户端。以下是如何配置Maven工程并引入必要的依赖。

1. 引入依赖

本示例使用的是 Spring Boot 3.0.4,RocketMQ的Spring Boot Starter版本为 2.3.1。为了确保客户端与服务端版本兼容,我们排除了默认的RocketMQ客户端依赖,并手动引入与Broker相同版本的客户端依赖。请注意,官方并未明确指定Spring Boot与RocketMQ整合的特定版本兼容性,因此在选择版本时需要谨慎。

注意:Spring Boot 3.0.4版本要求JDK版本为17或以上。

<dependencies>
    <dependency>
        <groupId>org.apache.rocketmq</groupId>
        <artifactId>rocketmq-spring-boot-starter</artifactId>
        <version>2.3.1</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.rocketmq</groupId>
                <artifactId>rocketmq-client</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.rocketmq</groupId>
        <artifactId>rocketmq-client</artifactId>
        <version>5.3.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>3.0.4</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <version>3.0.4</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

2. 启动类

创建一个简单的 Spring Boot 启动类:

@SpringBootApplication
public class RocketMQSBApplication {

    public static void main(String[] args) {
        SpringApplication.run(RocketMQSBApplication.class, args);
    }
}

3. 配置文件

application.properties 中配置 RocketMQ:

rocketmq.name-server=127.0.0.1:9876
rocketmq.producer.group=springBootGroup
rocketmq.consumer.group=testGroup
server.port=9000

4. 生产者实现

声明生产者,直接使用RocketMQTemplate进行消息发送。

package com.roy.rocketmq.basic;

import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Component
public class SpringProducer {

    @Resource
    private RocketMQTemplate rocketMQTemplate;

    public void sendMessage(String topic, String msg) {
        this.rocketMQTemplate.convertAndSend(topic, msg);
    }
}

5. 消费者实现

消费者的声明也很简单。所有属性通过@RocketMQMessageListener注解声明。

@Component
@RocketMQMessageListener(consumerGroup = "MyConsumerGroup", topic = "TestTopic", consumeMode = ConsumeMode.CONCURRENTLY, messageModel = MessageModel.BROADCASTING)
public class SpringConsumer implements RocketMQListener<String> {

    @Override
    public void onMessage(String message) {
        System.out.println("Received message: " + message);
    }
}

注意:Spring Boot中对消息的封装与RocketMQ原生API不同,需适应这一封装方式。


二、如何处理不同消息类型

1. 基础消息发送

基础的消息发送机制可以参考 com.roy.rocketmq.SpringRocketTest 单元测试类。

2. 多个Topic消息发送

RocketMQTemplate 实例仅支持发送单一Topic的消息。如果你需要发送至多个Topic,可以通过 @ExtRocketMQTemplateConfiguration() 注解声明不同的 RocketMQTemplate 实例。

3. 事务消息机制

对于事务消息,我们需要使用 @RocketMQTransactionListener 注解将事务监听器注入到Spring容器中,在这个注解当中可以通过rocketMQTemplateBeanName属性,指向具体的RocketMQTemplate子类。


三、实现原理

1. RocketMQTemplate

RocketMQTemplate 是 RocketMQ 与 Spring Boot 集成的核心组件,注入过程可以参考 org.apache.rocketmq.spring.autoconfigure.RocketMQAutoConfiguration 类。不同的集成版本可能不太相同,但大致基本不变。

@Configuration
@EnableConfigurationProperties({
   RocketMQProperties.class})
@ConditionalOnClass({
   MQAdmin.class})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值