使用rocketmq-spring-boot-starter发送消息如何指定tag与key?
记录使用rocketmq-spring-boot-starter整合sping-boot与rocketmq,遇到的一些问题 使用版本:2.1.0 maven依赖:<dependency><groupId>org.apache...
记录使用rocketmq-spring-boot-starter整合sping-boot与rocketmq,遇到的一些问题
使用版本:2.1.0
maven依赖:
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
具体使用方式就不详细介绍了,参考官方说明即可
官方文档地址:https://github.com/apache/rocketmq-spring/wiki/%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C
这边记录两个文档中发送消息API中未详细说明的两个问题:
1. 如何指定tag?
2. 如何指定key?
研究过程:
使用过rocketmq-client的应该知道,原始Message构造方法中支持指定tag及key
public Message(String topic, String tags, String keys, byte[] body) {
this(topic, tags, keys, 0, body, true);
}
但是在使用rocketmq-spring-boot-starter时,发送消息时有很多种方法:
异步的asyncSend:
public void asyncSend(String destination, Object payload, SendCallback sendCallback) {
this.asyncSend(destination, payload, sendCallback, (long)this.producer.getSendMsgTimeout());
}
同步的syncSend:
public SendResult syncSend(String destination, Object payload) {
return this.syncSend(destination, payload, (long)this.producer.getSendMsgTimeout());
}
以上两种只是举例,还有支持各种形参的方法,然而都没有显式的提供tag的参数,调试跟下去,无论哪种发送方法最终都需要将消息包装成rocketmq的Message,查看调用链到RocketMQUtil的getAndWrapMessage方法中,原来rocketmq-spring-boot-starter提供的发送方法将topic与tag合并成了一个参数,在程序中进行解析包装,见下图:
其实在源码的注释中也可以看出来这一点(ps: 源码注释真重要,一句话搞定所有疑惑),参数destination的格式:topicName:tags
在线源码:https://github.com/apache/rocketmq-spring/blob/master/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/core/RocketMQTemplate.java
至于另一个问题,如何设置key的值,经过上面的调试过程,很容易看到在RocketMQUtil的getAndWrapMessage方法中也有设置key的相关操作:
一层层返回跟上去便可以看到这个headers参数是org.springframework.messaging.Message中设置的,在发送消息的刚好有可以传入的对应类型参数,于是在构造参数时添加对应值即可。
最后,解决方案参考:
Message message = MessageBuilder.withPayload(dataList).setHeader("KEYS", IdUtil.simpleUUID()).build();
SendResult result = rocketMQTemplate.syncSend(topic + ":080", message);
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)