Springboot项目使用RocketMQ
创建Springboot项目
接着上一篇: 本地部署 为RocketMQ服务基础,开始创建一个Springboot(2.4.4)项目;其中包含:
- 配置
server.port=8086
spring.application.name=SpringRocketmqTest
# rocketmq server地址及端口
rocketmq.name-server=127.0.0.1:9876
# 如果无需发送消息则忽略该配置
rocketmq.producer.group=register-group
# 发送超时配置毫秒数
rocketmq.send-msg-timeout=5000
# 发送topic配置
rocketmq.registe.topic.name=registe_topic
- pom
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
实现
我们简单的写个注册接口,每次邀请注册生产者发送一个以registe_topic为topic的MQ消息:消费者接收到消息之后打印一句注册用户XXX邀请关系已经建立;
- 生产者,发送MQ消息
/**
* 注册邀请
* @param register
*/
@Override
public BaseResponse registe(RegisterVo register) {
log.info("用户注册" + register.getBeuserId());
RocketMqData rocketMqData = new RocketMqData();
rocketMqData.setMsgType(MqMsgTypeEnum.REGISTE.value);
long batchTime = System.currentTimeMillis();
rocketMqData.setData(JSON.toJSONString(register));
rocketMqProducer.sendRegisteTag(JSON.toJSONString(rocketMqData), Constants.STRING_REGISTE_TAG, String.valueOf(batchTime));
log.info("用户注册发送mq 消息" +JSON.toJSONString(rocketMqData));
return ResultUtil.success();
}
- Producer 工具类
@Value("${rocketmq.registe.topic.name}")
private String topicName;
@Resource
private RocketMQTemplate rocketMQTemplate;
public String sendRegisteTag(String content,String tag,String key) {
Message message = MessageBuilder.withPayload(content).setHeader(MessageConst.PROPERTY_KEYS,key).build();
SendResult sendResult = rocketMQTemplate.syncSend(topicName+tag, message);
return "success";
}
- 消费者接收 工具类
/**
* 注册通知消息处理.
*
* @author Glen
*/
@Service
@Slf4j
@RocketMQMessageListener(consumerGroup = "register-group", topic = "registe_topic")
public class RegisterConsumer implements RocketMQListener <MessageExt> {
private final String REGISTER = "registe_tag";
private final RegisterInvitationService registerInvitationService;
public RegisterConsumer(RegisterInvitationService registerInvitationService) {
this.registerInvitationService = registerInvitationService;
}
@Override
public void onMessage(MessageExt transferExt) {
byte[] body = transferExt.getBody();
String message = new String(body);
log.info("监听注册的mq消息:{}", message);
RocketMqData rocketMqData = JSON.parseObject(message, RocketMqData.class);
if (null == rocketMqData || null == rocketMqData.getData()) {
return;
}
if (REGISTER.equalsIgnoreCase(transferExt.getTags())) {
RegisterVo transfer = JSON.parseObject(rocketMqData.getData().toString(), RegisterVo.class);
if (null == transfer || null == transfer.getBeuserId()) {
log.error("注册邀请通知消息参数缺失,无法做后续处理 ! mq:{}",
JSONObject.toJSONString(rocketMqData));
} else {
try {
registerInvitationService.insertInvitationDetail(transfer);
} catch (Exception e) {
log.error("注册邀请通知处理异常 {}", ExceptionUtils.getStackTrace(e));
}
}
} else {
log.error(
" tags {} 未知 mq:{}",
transferExt.getTags(),
JSONObject.toJSONString(transferExt.getBody()));
}
}
}
- 消费
打印注册用户XXX邀请关系已经建立;
结果
-
项目控制台日志:
-
RocketMq控制台Message Detail:
完成!欢迎指正,如有疑问欢迎探讨评论!谢谢!
public static void main(String[] args) {
System.out.println("Technology changes the world , persistence !");
}