閱讀1038 返回首頁    go iPhone_iPad_Mac_apple


狀態不一致___異常類別_產品使用問題_消息隊列 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天

建議解決方案

按照如下步驟操作:

  1. 按照異常提示修改客戶端對應參數的配置,確保其在合理範圍內;
  2. 重啟應用。

3. 客戶端狀態異常

可能產生的原因

  1. 創建 Consumer、Producer 之後未顯示調用 start() 方法來啟動客戶端;
  2. 創建 Consumer、Producer 之後 start() 過程有異常導致客戶端啟動失敗;
  3. 創建 Consumer、Producer 並成功調用 start() 方法後,顯示調用了 shutdown() 方法關閉了客戶端;

建議解決方案

按如下步驟操作:

  1. 確保創建 Consumer、Producer 之後調用 start() 保證客戶端處於啟動狀態;
  2. 查看 ons.log 判斷在客戶端在啟動過程中是否有異常。

4. 訂閱關係不一致

問題描述

在不同的 JVM 中啟動了多個 Consumer,並且給相同的 Consumer ID 配置了不同的 Topic,或者是相同的 Topic 但 Tag 不同,最終導致訂閱關係不一致,消息不符合預期。

錯誤代碼示例

錯誤示例一:同一個訂閱組(CID-MQ-FAQ)訂閱的 Topic 不同(分別是 MQ-FAQ-TOPIC-1、MQ-FAQ-TOPIC-2)。

JVM-1上的代碼:

  1. Properties properties = new Properties();
  2. properties.put(PropertyKeyConst.ConsumerId, "CID-MQ-FAQ");
  3. Consumer consumer = ONSFactory.createConsumer(properties);
  4. consumer.subscribe("MQ-FAQ-TOPIC-1", "NM-MQ-FAQ", new MessageListener() {
  5. public Action consume(Message message, ConsumeContext context) {
  6. System.out.println("Receive: " + message);
  7. return Action.CommitMessage;
  8. }
  9. });
  10. consumer.start();

JVM-2上的代碼

  1. Properties properties = new Properties();
  2. properties.put(PropertyKeyConst.ConsumerId, "CID-MQ-FAQ");
  3. Consumer consumer = ONSFactory.createConsumer(properties);
  4. consumer.subscribe("MQ-FAQ-TOPIC-2", "NM-MQ-FAQ", new MessageListener() {
  5. public Action consume(Message message, ConsumeContext context) {
  6. System.out.println("Receive: " + message);
  7. return Action.CommitMessage;
  8. }
  9. });
  10. consumer.start();

錯誤示例二:同一訂閱組(CID-MQ-FAQ)訂閱的 Topic 相同,但 Tag 不同(分別NM-MQ-FAQ-1、NM-MQ-FAQ-2)。

JVM-1上的代碼:

  1. Properties properties = new Properties();
  2. properties.put(PropertyKeyConst.ConsumerId, "CID-MQ-FAQ");
  3. Consumer consumer = ONSFactory.createConsumer(properties);
  4. consumer.subscribe("MQ-FAQ-TOPIC-1", "NM-MQ-FAQ-1", new MessageListener() {
  5. public Action consume(Message message, ConsumeContext context) {
  6. System.out.println("Receive: " + message);
  7. return Action.CommitMessage;
  8. }
  9. });
  10. consumer.start();

JVM-2上的代碼:

  1. Properties properties = new Properties();
  2. properties.put(PropertyKeyConst.ConsumerId, "CID-MQ-FAQ");
  3. Consumer consumer = ONSFactory.createConsumer(properties);
  4. consumer.subscribe("MQ-FAQ-TOPIC-1", "NM-MQ-FAQ-2", new MessageListener() {
  5. public Action consume(Message message, ConsumeContext context) {
  6. System.out.println("Receive: " + message);
  7. return Action.CommitMessage;
  8. }
  9. });
  10. consumer.start();

建議解決方案

請確保在不同 JVM 中使用相同的 Consumer ID 啟動多個 Consumer 時,配置的 Topic 和 Tag 是一致的。

最後更新:2016-08-05 10:41:28

  上一篇:go 資源不存在___異常類別_產品使用問題_消息隊列 MQ-阿裏雲
  下一篇:go TXC for MQ 快速入門__TXC for MQ_消息隊列 MQ-阿裏雲