当前位置:   article > 正文

RocketMq报错:the message is illegal, maybe msg body or properties length not matched_org.apache.rocketmq.client.exception.mqclientexcep

org.apache.rocketmq.client.exception.mqclientexception: code: 13 desc: the m

前言:正在运行的RocketMq报错了,显示的全部错误信息为如下:

org.apache.rocketmq.client.exception.MQBrokerException: CODE: 13  DESC: the message is illegal, maybe msg body or properties length not matched. msg body length limit 128k, msg properties length limit 32k.For more information, please visit the url, http://rocketmq.apache.org/docs/faq/

为了解决此问题,我采取了三种方法,最终第三种方法解决了问题,需要问题解决的直接看第三种就行了

一. 百度

百度了半天只看见默认普通消息为4M,没看见什么确切的解决方法,还被误导了,下面这个官方链接说上面的报错是属性过大,还让我思考了半天我属性哪里过大了,没啥用,列在这里,以后再来看看

https://developer.aliyun.com/article/770355?spm=a2c6h.12873622.0.0.65372d03mTv8ms

  1. 这个我认为是错的,列在这里,以后再来看看
  2. 【问题原因】:
  3. 这个报错是因为优化后端集群节点的时候导致的报错。对使用是没有影响的哈, 只是日志会有异常记录下来。
  4. 也可以再观察下,如果是持续大量报错,并且消息会发送失败,需要提供实例 id/ 地域 /topic 等信息给到技术人员进行查看。 消息体太大导致发送失败
  5. 【问题描述】:
  6. 发送消息的时候报错:
  7. CODE13 the message is illegal, maybe msg body or properties length not matched. msg bodylength limit 128k, msg properties length limit 32k. 此异常为消息属性 properties 太大。
  8. CODE13 the message body size over max value, MAX:4194304。 此异常信息为消息 body 太大
  9. 【解决方案】:
  10. 消息体大小最大为 4MB, 一般建议发送的消息体在 4kb 之内 ( 性能最佳 )。
  11. 消息属性最大为 32kb,一般建议发送的消息属性在 1kb 之内 ( 性能最佳 )。
  12. 4MB 这个上限值不能修改,这个会影响全局性能。如果消息体的确很大,建 议侧优化消息体的内容,避免发送大消息或者带有链接地址的消息,或者可 以缩短或者分两条发送。

二. 在程序中修改

于是我看到在生产者中可以配置最大消息大小

producer.setMaxMessageSize(4194304);

本来想试试,但是看到默认的消息就是4M,于是感觉没用就没有试

  1. public DefaultMQProducer(String producerGroup, RPCHook rpcHook) {
  2. this.createTopicKey = "TBW102";
  3. this.defaultTopicQueueNums = 4;
  4. this.sendMsgTimeout = 3000;
  5. this.compressMsgBodyOverHowmuch = 4096;
  6. this.retryTimesWhenSendFailed = 2;
  7. this.retryTimesWhenSendAsyncFailed = 2;
  8. this.retryAnotherBrokerWhenNotStoreOK = false;
  9. this.maxMessageSize = 4194304;//默认大小
  10. this.producerGroup = producerGroup;
  11. this.defaultMQProducerImpl = new DefaultMQProducerImpl(this, rpcHook);
  12. }

 

三. 在broker配置文件中修改

最后我想到了是不是该去配置文件中调试一下,于是我打开了我的broker配置文件,发现了问题,当初部署rocketmq的时候为了图方便,直接在网上复制的别人的配置,结果那个人的配置中消息最大为128k。

broker配置文件在conf文件夹中,我这里用的2m-noslave模式,broker配置文件的位置在/conf/2m-noslave/broker-a.properties,默认应该就是/conf/broker.conf

下图是配置文件中已经调整过的大小

最终我修改了broker配置文件中最大消息大小,然后重启就成功了,打开官方的监测网站,可以看到broker消息最大为4M.

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/256889?site
推荐阅读
相关标签
  

闽ICP备14008679号