# spring-cloud-starter-rocketmq **Repository Path**: lxihaa/spring-cloud-starter-rocketmq ## Basic Information - **Project Name**: spring-cloud-starter-rocketmq - **Description**: 简单的rocketmq的starter工具 - **Primary Language**: Unknown - **License**: WTFPL - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-05-15 - **Last Updated**: 2023-05-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # spring-cloud-starter-rocketmq ## 一、快速开始 ### 0.前置操作 下载此项目,使用idea打开后点击右边maven进行生命周期的`install`操作。 或者 在控制台输入命令。 ```cmd mvn clean install ``` ### 1.引入依赖 ```xml com.uhu spring-cloud-starter-rocketmq 1.0-SNAPSHOT ``` ### 2.添加yaml配置 ```yaml rocketmq: serverIp: 192.168.191.129 port: 9876 consumer-group: mygroup send-timeout: 7000 ``` ### 3.创建消费者配置Bean ```java package com.uhu.cloud.demo2.biz.mq; import com.uhu.cloud.demo2.biz.dal.dataobject.Course; import com.uhu.rocketmq.manager.RocketManager; import com.uhu.rocketmq.message.SimpleMessage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; /** * @Author Bomber * @Description 消息消费者 * @Date 2023/5/11 16:29 * @Version 1.0 */ @Component public class Consumers { @Autowired private RocketManager rocketManager; @PostConstruct public void init() { /* * 方式1:创建一个消息主题,且进行消费 * * 参数1:主题 * 参数2:标签表达式,默认为* * 参数3:消费者 * */ System.out.println("创建【checkCourse】主题"); rocketManager.createTopic("checkCourse", null, (msg) -> { System.out.println("选择了课程:" + SimpleMessage.getContent(msg, Course.class)); }); /* * 方式2:创建一个消息主题,且仅作为生产 * * 参数1:主题 * */ System.out.println("创建【checkOther】主题"); rocketManager.createTopic("checkOther"); } } ``` ### 4.发送消息 ```java public class Controller { //注入bean @Autowired private MessageSender messageSender; public void sendMessage() { // 创建消息 SimpleMessage courseSimpleMessage = new SimpleMessage<>("checkCourse", "tag1", new Course(1L, "语文课")); // 发送消息 messageSender.sendMessage(courseSimpleMessage); } } ``` ## 二、样例 ### 1.消息内容实体对象 ```java package com.uhu.cloud.demo2.biz.dal.dataobject; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * @Author Bomber * @Description 课程 * @Date 2023/5/11 16:34 * @Version 1.0 */ @Data @AllArgsConstructor @NoArgsConstructor public class Course { private Long id; private String name; } ``` ### 2.配置主题 ```java package com.uhu.cloud.demo2.biz.mq; import com.uhu.cloud.demo2.biz.dal.dataobject.Course; import com.uhu.rocketmq.manager.RocketManager; import com.uhu.rocketmq.message.SimpleMessage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; /** * @Author Bomber * @Description 消息消费者 * @Date 2023/5/11 16:29 * @Version 1.0 */ @Component public class Consumers { @Autowired private RocketManager rocketManager; @PostConstruct public void init() { // 创建一个消息课程,且进行打印输出消费 /* * 参数1:主题 * 参数2:标签表达式,默认为* * 参数3:消费者 * */ System.out.println("创建【checkCourse】主题"); rocketManager.createTopic("checkCourse", null, (msg) -> { System.out.println("选择了课程:" + SimpleMessage.getContent(msg, Course.class)); }); } } ``` ### 3.发送请求后发送消息 ```java @GetMapping("/send") public void send() { // ...中间业务省略 // 编辑消息简单消息(内部封装课程对象) SimpleMessage courseSimpleMessage = new SimpleMessage<>("checkCourse", "tag1", new Course(1L, "语文课")); // 发送简单消息 messageSender.sendMessage(courseSimpleMessage); } ``` ## 三、关于SimpleMessage类 简单消息类型,可携带可序列化对象 ```java package com.uhu.rocketmq.message; import com.alibaba.fastjson2.JSONObject; import org.apache.rocketmq.common.message.Message; import java.nio.charset.StandardCharsets; /** * @Author Bomber * @Description 简单消息 * @Date 2023/5/11 16:17 * @Version 1.0 */ public class SimpleMessage extends Message { /** * 简单消息 * @param topic 主题 * @param tags 标签 * @param content 内容 */ public SimpleMessage(String topic, String tags, T content) { } /** * 获取消息内容对象 * @param msg 消息 * @param contentClass 消息内容类型 * @param * @return */ public static T getContent(Message msg, Class contentClass) { } } ``` 提供能力: - 静态方法`SimpleMessage.getContent(...)`:可抽取消息体中携带的消息内容对象 ## 其他问题 SpringBoot高版本可能出现无法自动注入bean的问题,可以在启动类上添加注解`@ComponentScan(basePackages={"你自己的包", "com.uhu.rocketmq"})`解决这个问题