携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情
初衷
消息中间件很多程序员都会有了解,很多系统也用到了这一技术点,但是每次开发新系统都要重新码代码,做事让人有一种无奈,所以就想着自己封装一份代码,打成jar包,便于每次使用的时候不在重复的写同一段代码,这样可以让我专注于产品的业务逻辑
消息实体类
我们首先新建一个消息基类,保存业务键、消息来源、发送时间、跟踪ID和重试次数
让我们的消息实体类继承消息基类,这其中我们配置了泛型来保存我们的消息message
@Data
@EqualsAndHashCode(callSuper = true)
public class RocketMqMessage<T> extends BaseMqMessage {
/**
* 业务消息
*/
private T message;
private LocalDate birthday;
private LocalDateTime tradeTime;
}
@Data
public class BaseMqMessage {
protected String key;
protected String source = "";
protected LocalDateTime sendTime = LocalDateTime.now();
protected String traceId = UUID.randomUUID().toString();
protected Integer retryTimes = 0;
}
构建RocketMq模板类
如果封装的方法不够,我们提供原生的使用方式。获取原生模板getTemplate()
这里重写了同步发送消息、延迟发送消息,未重写异步消息,异步消息内有回调通知方法,需要我们处理自己的回调信息,所以在这里省略掉了,根据rocketMq api文档可以很清除的完成异步回调。
@Component
public class RocketMqTemplate {
@Resource
private RocketMQTemplate rocketMQTemplate;
public RocketMQTemplate getTemplate() {
return template;
}
public String buildDestination(String topic, String tag) {
return topic + RocketMqConstant.DELIMITER + tag;
}
/**
* 发送同步消息
*/
public <T extends BaseMqMessage> SendResult send(String topic, String tag, T message) {
// 注意分隔符
return send(topic + RocketMqConstant.DELIMITER + tag, message);
}
/**
* 发送延迟消息
*/
public <T extends BaseMqMessage> SendResult send(String topic, String tag, T message, int delayLevel) {
return send(topic + RocketMqConstant.DELIMITER + tag, message, delayLevel);
}
}
使用方法
此处已经构件好的模板,我们可以调用模板方法即可,完成消息的发送。使用简单方便。如有问题可以随时留言,看到后第一时间回复
更多编程内容,请扫码关注《coder练习生》