狀態不一致___異常類別_產品使用問題_消息隊列 MQ-阿裏雲
1. 消息不合法
可能產生的原因
一般是消息屬性、消息內容不合法,不合法的情況有:
- 消息為空
- 消息內容為空
- 消息內容長度為0
- 消息內容超過限定長度
建議解決方案
請確保消息沒有以上的不合法情況,並根據異常提示進行解決。
2. 參數不合法
可能產生的原因
參數不合法的情況有以下幾種:
嵌套的異常說明 | 異常描述 |
---|---|
consumeThreadMin Out of range [1, 1000] | 消費端線程數設置不合理 |
consumeThreadMax Out of range [1, 1000] | 消費端線程數設置不合理 |
messageListener is null | 未設置messageListener |
consumerGroup is null | 未設置Consumer ID |
msg delay time more than 40 day | 定時消息延時不能超過40天 |
建議解決方案
按照如下步驟操作:
- 按照異常提示修改客戶端對應參數的配置,確保其在合理範圍內;
- 重啟應用。
3. 客戶端狀態異常
可能產生的原因
- 創建 Consumer、Producer 之後未顯示調用 start() 方法來啟動客戶端;
- 創建 Consumer、Producer 之後 start() 過程有異常導致客戶端啟動失敗;
- 創建 Consumer、Producer 並成功調用 start() 方法後,顯示調用了 shutdown() 方法關閉了客戶端;
建議解決方案
按如下步驟操作:
- 確保創建 Consumer、Producer 之後調用 start() 保證客戶端處於啟動狀態;
- 查看 ons.log 判斷在客戶端在啟動過程中是否有異常。
4. 訂閱關係不一致
問題描述
在不同的 JVM 中啟動了多個 Consumer,並且給相同的 Consumer ID 配置了不同的 Topic,或者是相同的 Topic 但 Tag 不同,最終導致訂閱關係不一致,消息不符合預期。
錯誤代碼示例
錯誤示例一:同一個訂閱組(CID-MQ-FAQ)訂閱的 Topic 不同(分別是 MQ-FAQ-TOPIC-1、MQ-FAQ-TOPIC-2)。
JVM-1上的代碼:
Properties properties = new Properties();
properties.put(PropertyKeyConst.ConsumerId, "CID-MQ-FAQ");
Consumer consumer = ONSFactory.createConsumer(properties);
consumer.subscribe("MQ-FAQ-TOPIC-1", "NM-MQ-FAQ", new MessageListener() {
public Action consume(Message message, ConsumeContext context) {
System.out.println("Receive: " + message);
return Action.CommitMessage;
}
});
consumer.start();
JVM-2上的代碼
Properties properties = new Properties();
properties.put(PropertyKeyConst.ConsumerId, "CID-MQ-FAQ");
Consumer consumer = ONSFactory.createConsumer(properties);
consumer.subscribe("MQ-FAQ-TOPIC-2", "NM-MQ-FAQ", new MessageListener() {
public Action consume(Message message, ConsumeContext context) {
System.out.println("Receive: " + message);
return Action.CommitMessage;
}
});
consumer.start();
錯誤示例二:同一訂閱組(CID-MQ-FAQ)訂閱的 Topic 相同,但 Tag 不同(分別NM-MQ-FAQ-1、NM-MQ-FAQ-2)。
JVM-1上的代碼:
Properties properties = new Properties();
properties.put(PropertyKeyConst.ConsumerId, "CID-MQ-FAQ");
Consumer consumer = ONSFactory.createConsumer(properties);
consumer.subscribe("MQ-FAQ-TOPIC-1", "NM-MQ-FAQ-1", new MessageListener() {
public Action consume(Message message, ConsumeContext context) {
System.out.println("Receive: " + message);
return Action.CommitMessage;
}
});
consumer.start();
JVM-2上的代碼:
Properties properties = new Properties();
properties.put(PropertyKeyConst.ConsumerId, "CID-MQ-FAQ");
Consumer consumer = ONSFactory.createConsumer(properties);
consumer.subscribe("MQ-FAQ-TOPIC-1", "NM-MQ-FAQ-2", new MessageListener() {
public Action consume(Message message, ConsumeContext context) {
System.out.println("Receive: " + message);
return Action.CommitMessage;
}
});
consumer.start();
建議解決方案
請確保在不同 JVM 中使用相同的 Consumer ID 啟動多個 Consumer 時,配置的 Topic 和 Tag 是一致的。
最後更新:2016-08-05 10:41:28
上一篇:
資源不存在___異常類別_產品使用問題_消息隊列 MQ-阿裏雲
下一篇:
TXC for MQ 快速入門__TXC for MQ_消息隊列 MQ-阿裏雲
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲