1. 程式人生 > >訊息佇列報錯整理

訊息佇列報錯整理

+++++++++++++++++++++++++++++
訊息佇列單條訊息長度限制
+++++++++++++++++++++++++++++
公司功能在點選[稽核]功能時,資料量少時稽核功能正常;當資料量大時,比如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
在這裡插入圖片描述