【Springboot3】Springboot3 搭建RocketMQ 最简单案例

news/2025/2/22 5:21:56

说来也奇怪,RocketMQ 不能很好的兼容Springboot3,刚开始上手Springboot3集成RocketMQ会发现总是不能实例化RocketMQTemplate,老是启动时报错。本项目采用Springboot3,JDK21 ,Maven 3.9,提供一个非常简单的示例。

案例就只有这5个类,没有建package。
在这里插入图片描述

提前工作

我的RocketMQ服务部署在虚拟机Linux服务器,ip地址是 192.168.218.128,Linux部署RocketMQ比较简单。
运行Springboot3项目之前,需要先把Linux中 mqnamesrvmqbroker两个服务启动起来。

引入依赖

注意rocketmq-spring-boot-starter版本 2.3.1 不要改动,目前2.3.1版本可以兼容5.3.1,其他版本可能出现注入IOC容器失败。

	 <dependency>
         <groupId>org.apache.rocketmq</groupId>
         <artifactId>rocketmq-spring-boot-starter</artifactId>
         <version>2.3.1</version>
     </dependency>
     
     <dependency>
         <groupId>org.apache.rocketmq</groupId>
         <artifactId>rocketmq-client</artifactId>
         <version>5.3.1</version>
     </dependency>
     
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
     </dependency>

yaml中添加RocketMQ配置信息

配置类 application.yaml,注意rocketmq标签不是 spring 标签的子标签,二者是并立的。

spring:
  application:
    name: rocketmq-demo
    
rocketmq:
  name-server: 192.168.218.128:9876
  # 必须初始化生产者,才会实例化RocketMQTemplate
  producer:
    group: producer-group
  consumer:
    group: consumer-group

// 配置后端服务端口是8081
server:
  port: 8081

建立配置类

手动配置RocketMQConfig注入:配置 RocketMQ 消息中间件的相关参数,并通过 Spring 的依赖注入机制将其集成到 Spring Boot 应用程序中。


@Configuration
public class RocketMQConfig {

    @Value("${rocketmq.name-server}")
    private String nameServer;

    @Value("${rocketmq.producer.group}")
    private String producerGroup;

    @Bean
    public RocketMQTemplate rocketMQTemplate() {
        RocketMQTemplate rocketMQTemplate = new RocketMQTemplate();
        DefaultMQProducer defaultMQProducer = new DefaultMQProducer();
        defaultMQProducer.setProducerGroup(producerGroup);
        defaultMQProducer.setNamesrvAddr(nameServer);
        rocketMQTemplate.setProducer(defaultMQProducer);
        return rocketMQTemplate;
    }
}

创建生产者

import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author 10463
 */
@Service
public class RocketMQProducer {

    @Autowired
    private RocketMQTemplate rocketMQTemplate;

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

创建消费者

import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

/**
 * @author 10463
 */
@Component
@Service
@RocketMQMessageListener(topic = "test-topic", consumerGroup = "consumer-group")
public class RocketMQConsumer implements RocketMQListener<String> {

    @Override
    public void onMessage(String message) {
        System.out.println("消费者收到 message: " + message);
    }
}

创建控制类

@Controller
public class MessageController {
    @Autowired
    private RocketMQProducer rocketMQProducer;

    @GetMapping("/sendMessage")
    public String sendMessage(@RequestParam(value = "message", required = true) String message) {
        System.out.println("进入方法");
        rocketMQProducer.sendMessage("test-topic", message);
        return "消息发送成功";
    }
}

测试

启动Application类,代码如下,我没有添加任何额外注解:

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

使用postMan ,执行GET 请求模拟:
http://localhost:8081/sendMessage?message=HelloRocketMQ
没有postman也没关系,直接在网址中复制回车。

如果部署没问题,在控制台会输出

进入方法
消费者收到 message: HelloRocketMQ

在这里插入图片描述
该案例没有任何复杂注解和层级关系,部署成功后可以进行后续的复杂RocketMQ学习。


http://www.niftyadmin.cn/n/5861614.html

相关文章

Java 第九章 网络编程(2)

目录 网络编程 TCP编程 实例(发送文件) UDP编程 理解 流 程&#xff1a; 发送端 接收端 网络编程 TCP编程 实例(发送文件) public class Client {public static void main(String[] args) {// 在客户端输入一个文件try {FileInputStream inputStream new FileInputS…

使用Python进行PDF隐私信息检测

在当今&#xff0c;数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形式存储和传输&#xff0c;确保这些信息的安全至关重要。本文将介绍如何使用Python及其相关库来检测PDF文件中的隐私信息&#xff0c;如姓名、身份证号、手机号和邮箱等。 C:\pythoncode\new\checkp…

Hopper架构 GEMM教程

一 使用 1.1 makefile compile:nvcc -arch=sm_90a -lcuda -lcublas -std=c++17 matmul_h100_optimal.cu -o testrun:./test加入-lcublas,不然会有函数无法被识别 二 代码分析 2.1 kernel外参数分析 2.1.1 基本参数 constexpr int BM = 64*2;constexpr int BN = 256;cons…

React fiber架构中 优先级是如何确定的?

React fiber架构中 优先级是如何确定的? 在React Fiber架构中&#xff0c;优先级的确定是一个复杂而精细的过程&#xff0c;它涉及多种因素和策略。以下是对React Fiber中优先级确定方式的详细分析&#xff1a; 一、优先级类型与划分 React Fiber为不同的任务分配了不同的优…

使用(xshell+xftp)将前端项目部署到服务器

一.以vue项目为例 将项目打包生成dist文件 二.下载载安装xshell和xftp 下载地址&#xff1a;家庭/学校免费 - NetSarang Website 三.连接服务器 在xshell新建会话&#xff08;需要用到服务器、用户名、密码、端口号&#xff09;正确输入后连接到服务器 使用命令连接&#x…

angular中使用animation.css实现翻转展示卡片正反两面效果

html <div(click)"flip()"class"animate__animated cursor--pointer"[ngClass]"{ animate__flipInX: isFlipped }" ><div *ngIf"!isFlipped">正面</div><div *ngIf"isFlipped">背面</div> …

店铺矩阵崩塌前夜:跨境多账号运营的3个生死线

多账号运营的3条生死线&#xff0c;跨境卫士助你避开矩阵崩塌危机&#xff01; 在跨境电商行业&#xff0c;多账号运营是许多卖家扩大规模、分散风险的常用策略。然而&#xff0c;随着平台风控的日益严格&#xff0c;多账号运营的风险也在不断加剧。近期&#xff0c;某知名卖家…

Apifox 增强 AI 接口调试功能:自动合并 SSE 响应、展示DeepSeek思考过程

在API调试的世界里&#xff0c;效率和准确性往往决定了开发者的成败。你是否曾为处理SSE&#xff08;Server-Sent Events&#xff09;响应而烦恼&#xff1f;又是否期待在调试时能直观看到AI的“思考过程”&#xff1f;Apifox这次全新升级&#xff0c;将AI接口调试功能推向新高…