# 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"})`解决这个问题