2rocketmq源码解析之与springboot集成(代码片段)

carl-zhao carl-zhao     2023-03-03     383

关键词:

上一篇文章分析了一下 RocketMQ 的基本架构、概念、安装以及使用方式。现在大多数项目都是基于 Spring Boot。因为它很方便的自动装配机制,所以现在构建项目都是基于 Spring Boot。下面我们来分析一下 RocketMQ 是如何集成 Spring Boot 的。

RocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer 负责生产消息,Consumer 负责消费消息,Broker 负责存储消息。Broker 在实际部署过程中对应一台服务器,每个 Broker 可以存储多个Topic的消息,每个Topic的消息也可以分片存储于不同的 Broker。Message Queue 用于存储消息的物理地址,每个Topic中的消息地址存储于多个 Message Queue 中。ConsumerGroup 由多个Consumer 实例构成。

RocketMQ 具体的相关概念可以查看 Rocket MQ 基本概念 .

1、项目结构

2、项目依赖

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <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>
            <version>2.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3、项目配置

application.yml

## Server Config
server:
  port: 8080

## RocketMQ Config
rocketmq:
  name-server: localhost:9876
  producer:
    group: test-topic-producer-group

4、订单实体类

Order 类是我们定义的消息发送的具体实体类。

Order.java

@Data
public class Order 

    /** 订单ID */
    private String id;
    /** 订单名称 */
    private String name;
    /** 订单状态 */
    private Integer status;


5、项目启动类

DemoApplication 这个类是 Spring Boot 启动类,并且依赖注入了 RocketMQTemplate 用于发送消息。

DemoApplication.java

@RestController
@SpringBootApplication
public class DemoApplication 

    @Resource(name = "rocketMQTemplate")
    private RocketMQTemplate rocketMQTemplate;

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

    @RequestMapping("/api/test")
    public String test()
        Order order = new Order();
        order.setId("123456");
        order.setName("MacBook Pro");
        order.setStatus(1);
        rocketMQTemplate.convertAndSend("test-topic", order);
        return "ok";
    


6、消息监听类

TestTopicListener 为消息监听类,监听主题为 test-topic 接收到消息发送方的消息。

@Component
@RocketMQMessageListener(consumerGroup = "test-topic-consumer-group", topic = "test-topic")
public class TestTopicListener implements RocketMQListener<Order> 

    public void onMessage(Order order) 
        System.out.println(JSON.toJSONString(order));
    


7、测试

通过 Postman 发送请求:

请求发送成功,并且响应 ok

并且后台控制台也成功打印我们发送出去的消息:

参考文章:

  • https://rocketmq.apache.org/docs/rmq-arc/
  • https://github.com/apache/rocketmq/blob/master/docs/cn/concept.md

springboot源码解析-构建springapplication

1packagecom.microservice.framework;23importorg.springframework.boot.SpringApplication;4importorg.springframework.boot.autoconfigure.SpringBootApplication;56@SpringBootApplication7publicclassMySpringAp 查看详情

springboot源码深度解析,方法解析,类加载解析,容器建立

springboot的启动都是从main方法开始的,如下:@SpringBootApplicationpublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.class,args);}}后面会进入SpringApplication的初始化方法:publicstaticCo 查看详情

springboot3.0源码启动流程源码解析•上(代码片段)

文章目录初始化SpringBoot启动类:@SpringBootApplicationpublicclassAppRunpublicstaticvoidmain(String[]args)SpringApplication.run 查看详情

springboot源码解析-----springboot精髓:集成aop

本篇主要集成Sping一个重要功能AOP我们还是先回顾一下以前Spring中是如何使用AOP的,大家可以看看我这篇文章spring5源码深度解析-----AOP的使用及AOP自定义标签Spring中使用AOP引入Aspect<dependency><groupId>org.aspectj</groupId><... 查看详情

springboot源码解析启动过程(代码片段)

1.springboot的入口程序@SpringBootApplicationpublicclassStartupApplicationpublicstaticvoidmain(String[]args)SpringApplication.run(StartupApplication.class,args);当程序开始执行之后,会调用SpringApplication 查看详情

springboot源码解析启动过程(代码片段)

1.springboot的入口程序@SpringBootApplicationpublicclassStartupApplicationpublicstaticvoidmain(String[]args)SpringApplication.run(StartupApplication.class,args);当程序开始执行之后,会调用SpringApplication的构造方 查看详情

果子学院springboot源码解析视频教程

目录:第1节SpringBoot介绍,源码阅读环境搭建,插件安装[免费观看]00:13:12分钟 第2节Spring源码阅读环境搭建[免费观看]00:19:58分钟 第3节SpringApplication初始化[免费观看]00:20:47分钟%h8p;L%a2b&u‘S第4节SpringApplicationrun方法解析(1)--... 查看详情

springboot-自动装配源码解析(代码片段)

文章目录源码流程图getAutoConfigurationEntry源码图地址源码流程图我们找几个比较重要的方法来讲一下getAutoConfigurationEntry主要的功能:进行扫描具有META-INF/spring.factories文件的jar包/** *Returnthe@linkAutoConfigurationEntrybasedonthe@link 查看详情

springboot启动源码解析二(代码片段)

SpringBoot使用及启动源码解析一_踩踩踩从踩的博客-CSDN博客前言之前的文章主要介绍的是springboot  也就是springbootapplication 这个启动类,有兴趣的可以看看之前的,这篇文章继续 研究 springboot自动装配,如何利用自... 查看详情

springboot之启动原理解析及源码阅读

...ttps://www.cnblogs.com/shamo89/p/8184960.html正文我们开发任何一个SpringBoot项目,都会用到如下的启动类@SpringBootApplication                                      //Annotation(注解)定义了(@Spr... 查看详情

springboot(1.5.6.release)源码解析

启动SpringBoot,需要在入口函数所在的类上添加@SpringBootApplication注解1@SpringBootApplication2publicclassApplication{3publicstaticvoidmain(String[]args){4SpringApplication.run(Application.class,args);5}6}我们来看一下@SpringBo 查看详情

springboot--springboot的启动整体过程|自动配置类解析注册过程|spring5源码解析(代码片段)

1.SpringBoot启动类注解@SpringBootApplication:2.SpringBoot的启动: 2.1.getSpringFactoriesInstances: 2.1.1.SpringFactoriesLoader.loadFactoryNames: 2.2.SpringApplication#run: 查看详情

springboot--springboot的启动整体过程|自动配置类解析注册过程|spring5源码解析(代码片段)

1.SpringBoot启动类注解@SpringBootApplication:2.SpringBoot的启动: 2.1.getSpringFactoriesInstances: 2.1.1.SpringFactoriesLoader.loadFactoryNames: 2.2.SpringApplication#run: 查看详情

springboot(1.5.6.release)源码解析

上一篇分析了@SpringBootApplication注解,接下来从SpringApplication.run(Application.class,args);代码开始一行行DEBUG进行分析1@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})2publicclassApplication{3publicstat 查看详情

springboot源码解析##如何自定义starter让springboot扫描到你的配置

  配置factories文件,然后让spring去扫描到  查看详情

springboot:springapplication.run的源码解析(代码片段)

1.声明当前内容主要分析SpringBoot中的的SpringApplication的源码,一般来说Spring程序中的ioc的容器必定会创建,这个是SpringBoot的核心!2.基本的启动方式1.使用静态方法启动SpringApplication.run(primarySource,args)2.构建实例方式启动Sprin... 查看详情

springboot2各类型参数解析原理(源码分析)(代码片段)

SpringBoot2各类型参数解析原理(源码分析)一、使用注解来获取请求参数1.1获取HandlerAdapter1.2执行目标方法1.2.1参数解析器(HandlerMethodArgumentResolver)1.2.2返回值处理器(HandlerMethodReturnValueHandler)1.2.3反 查看详情

springboot实战源码解析springboot自动配置原理

一、简介Spring致力于让Java开发更简单,SpringBoot致力于让使用Spring进行Java开发更简单,SpringCloud致力于基于SpringBoot构建微服务生态圈,让微服务开发更简单。随着这几年spring官网的更新可有看出spring发展的roadmap网上... 查看详情