訊息佇列報錯整理
阿新 • • 發佈:2018-12-17
+++++++++++++++++++++++++++++
訊息佇列單條訊息長度限制
+++++++++++++++++++++++++++++
公司功能在點選[稽核]功能時,資料量少時稽核功能正常;當資料量大時,比如1000條,此時系統會給出如下提示
檢視網址給出的提示
https://help.aliyun.com/knowledge_detail/29635.html
原因
報錯原因大致可分成兩種型別:訊息為空,訊息超長。訊息為空可以直接排除,首先該功能正常,同時debug發現數據是有的,
body=7400000。那隻能是訊息超長的原因造成的。檢視訊息佇列的底層jar原始碼,發現限制單條訊息最大為4MB。訊息的body=7400000,應該是接近7MB。
解決
將我們使用的生產者BapONSMQProducer,在構造器中強制轉換為物件ProducerImpl,然後獲取預設的生產者getDefaultMQProducer,在預設生產者中重新設定訊息佇列單條訊息的大小。此處修改為1024 * 1024 * 100
public class BapONSMQProducer implements IBapMQProducer { private String topic; private Producer producer; public BapONSMQProducer(String address, String topic, String producerId, String accessKey, String secretKey){ this.topic = topic; Properties props = new Properties(); props.put(PropertyKeyConst.ProducerId, producerId); props.put(PropertyKeyConst.AccessKey, accessKey); props.put(PropertyKeyConst.SecretKey, secretKey); if(address!=null && !address.equals("")){ props.put(PropertyKeyConst.NAMESRV_ADDR, address); } producer = ONSFactory.createProducer(props); // producer.start(); ProducerImpl producerImpl=(ProducerImpl) producer; //由訊息佇列訊息預設最大4MB改為100MB producerImpl.getDefaultMQProducer().setMaxMessageSize(1024 * 1024 * 100); producerImpl.start(); } }
+++++++++++++++++++++++++++++
啟動MQ的監控平臺,但是啟動不起來
+++++++++++++++++++++++++++++
首先檢視該埠是否允許訪問,以及該埠是否被佔用。
如果不允許我們使用該埠,或者已被佔用,比如8080,我們可以修改server.port=xxx;
同時namesrv的地址也要修改 -> rocketmq.config.namesrvAddr=192.168.172.101:9876; 如果namesrv是叢集配置,在後面追加即可
例如rocketmq.config.namesrvAddr=192.168.172.101:9876;192.168.172.102:9876