最近公司项目使用了 Apache rokectMq 进行消息发送,本人也是第一次接触mq。
领导说要处理下mq消息发送超长。需要进行消息压缩。然而我就进行各种百度,查看相关的问题。
可惜这类问题太少就几个代码片段提供。
后续我根据网上提供的代码段,阅读了下mq发送消息的源码
com.alibaba.rocketmq.client.producer.DefaultMQProducer类寻找77行send发送消息。

com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl类寻找391行

在继续跟进send方法,最后进入到sendDefultImpl,见名知意,也就是发送(消息)默认的实现方法

继续跟进方法进入如下代码

一看就理解这方法了吧。尝试压缩消息。继续跟进方法看一看

返回值是 true false ,参数是消息,
1.获得消息体
2.进行if判断 消息不为空并且消息长度大于等于其长度(compressMsgBodyOverHowmuch:消息 Body 超过多大开始压缩)
3.就开发进行压缩操作,主要压缩方法就是 UtilAll.compress这方法。想看的继续跟进了。在这里我就不附代码了。
总结:发现rokectmq已经帮助考虑了这点。本人对于rokectmq了解不深,也就刚刚使用阶段。如有大神发现此文章哪里解释不对。望提供其见解,让我摆脱迷茫。谢谢。
网友评论