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

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