代码拉取完成,页面将自动刷新
下载此项目,使用idea打开后点击右边maven进行生命周期的install
操作。
或者
在控制台输入命令。
mvn clean install
<dependency>
<groupId>com.uhu</groupId>
<artifactId>spring-cloud-starter-rocketmq</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
rocketmq:
serverIp: 192.168.191.129
port: 9876
consumer-group: mygroup
send-timeout: 7000
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");
}
}
public class Controller {
//注入bean
@Autowired
private MessageSender messageSender;
public void sendMessage() {
// 创建消息
SimpleMessage<Course> courseSimpleMessage = new SimpleMessage<>("checkCourse", "tag1", new Course(1L, "语文课"));
// 发送消息
messageSender.sendMessage(courseSimpleMessage);
}
}
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;
}
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));
});
}
}
@GetMapping("/send")
public void send() {
// ...中间业务省略
// 编辑消息简单消息(内部封装课程对象)
SimpleMessage<Course> courseSimpleMessage = new SimpleMessage<>("checkCourse", "tag1", new Course(1L, "语文课"));
// 发送简单消息
messageSender.sendMessage(courseSimpleMessage);
}
简单消息类型,可携带可序列化对象
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<T> extends Message {
/**
* 简单消息
* @param topic 主题
* @param tags 标签
* @param content 内容
*/
public SimpleMessage(String topic, String tags, T content) {
}
/**
* 获取消息内容对象
* @param msg 消息
* @param contentClass 消息内容类型
* @param <T>
* @return
*/
public static <T> T getContent(Message msg, Class<T> contentClass) {
}
}
提供能力:
SimpleMessage.getContent(...)
:可抽取消息体中携带的消息内容对象SpringBoot高版本可能出现无法自动注入bean的问题,可以在启动类上添加注解@ComponentScan(basePackages={"你自己的包", "com.uhu.rocketmq"})
解决这个问题
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。