RocketMQ集成SpringBoot

前言

项目运行前需安装好RocketMQ与环境变量配置,对Rocket相关知识不了解的可按照以下文章顺序后再阅读该文:

依赖配置

RocketMQ Producer与Consumer的依赖配置都相同,为了方便环境配置,在root模块添加以下依赖配置进行版本控制:

    <properties>
        <rockemq-spring.version>2.0.4</rockemq-spring.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.rocketmq</groupId>
                <artifactId>rocketmq-spring-boot-starter</artifactId>
                <version>${rockemq-spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>

注:rocketmq-spring-boot-starter 2.0.4版本依赖的RocketMQ版本为4.5.1,故建议安装的RocketMQ客户端版本也为4.5.1避免不必要的错误(如MQClientException)。

Producer模块搭建

  • 依赖配置

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.rocketmq</groupId>
                <artifactId>rocketmq-spring-boot-starter</artifactId>
            </dependency>
            <!-- 用于存放RocketMQ通用配置信息 -->
            <dependency>
                <groupId>io.github.wilson-he</groupId>
                <artifactId>rocket-common</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
        </dependencies>
    
  • application.yml

    rocketmq:
      name-server: 127.0.0.1:9876
      producer:
        group: spring-boot-producer
    server:
      port: 9990
    
  • ProducerApplication

    public class ProducerApplication {
        @Resource
        private RocketMQTemplate mqTemplate;
    
        @GetMapping("/send")
        public String send(@RequestParam String msg) {
            mqTemplate.send(RocketConstant.Topic.SPRING_BOOT_TOPIC, MessageBuilder.withPayload(msg).build());
            return "success";
        }
    
        public static void main(String[] args) {
            SpringApplication.run(ProducerApplication.class, args);
        }
    }
    

RocketMQTemplate可看作RocketMQ生产者(DefaultMQProducer类)在Spring Boot中的快速集成类,其方法都可在DefaultMQProducer中找到匹配的方法(如异步消息、同步消息、事务消息的发送等)。

Consumer模块搭建

  • 依赖配置同Producer

  • application.yml

    rocketmq:
      name-server: 127.0.0.1:9876
    server:
      port: 10000
    
  • ConsumerListener-RocketMQ消息监听器

    @Slf4j
    @RocketMQMessageListener(consumerGroup = RocketConstant.ConsumerGroup.SPRING_BOOT_CONSUMER, topic = RocketConstant.Topic.SPRING_BOOT_TOPIC)
    @Service
    public class ConsumerListener implements RocketMQListener<MessageExt> {
        @Override
        public void onMessage(MessageExt message) {
            log.info("msg id: {}, payload: {}", message.getMsgId(), new String(message.getBody()));
        }
    }
    
  • ConsumerApplication

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

@RocketMQMessageListener的注解的类相当于一个消费者实例,用于消费实例信息配置,消费消息还需实现RocketMQListener接口进行消息消费操作,@RocketMQMessageListener配置项都可在DefaultMQPushConsumer下找到匹配的配置项,主要配置项如下:

  • consumerGroup:消费组名,必须
  • topic:主题,必须
  • nameServer:名字服务器地址,默认${rocketmq.name-server:},也可通过application.yml配置
  • selectorType:消息控制类型,默认TAG,同Topic下的tag
  • selectorExpression:tag表达式,默认"*",接收该topic下的所有消息
  • consumerThreadMax:消费者最大线程数,默认64
  • consumeTimeout:消费超时时间,单位微秒,默认30000(5s)

Common模块

Producer与Consumer的通用配置(如Topic)可以抽出一个通用模块进行维护,当前例子的Common模块比较简单,只负责常量的维护:

public interface RocketConstant {
    interface ConsumerGroup {
        String SPRING_BOOT_CONSUMER = "spring-boot-consumer";
    }

    interface Topic {
        String SPRING_BOOT_TOPIC = "spring-boot-topic";
    }
}

运行测试

  1. 运行NameServer:mqnamesrv
  2. 运行Broker:mqbroker -n 127.0.0.1:9876
  3. 运行ConsumerApplication
  4. 运行ProducerApplication
  5. 调用ProducerApplication信息发送接口进行测试
    (如http://localhost:9990/send?msg=hey RocketMQ)
    在这里插入图片描述

项目地址:spring-rocketmq

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章