消息中间件(RocketMq)之 消息生产者

148 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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练习生》