全部產品
Search
文件中心

:QueueHasDiffField

更新時間:Jun 30, 2024

本文為您介紹雲訊息佇列 RabbitMQ 版用戶端報QueueHasDiffField類型錯誤的原因和處理方法。

問題現象

使用雲訊息佇列 RabbitMQ 版用戶端串連雲訊息佇列 RabbitMQ 版服務端時,報QueueHasDiffField類型錯誤。 例如QueueHasDiffField[OAutoDelete=false&NAutoDelete=true;] 。

說明 報錯中O開頭的參數的屬性值為要調用的Queue的參數的已設定屬性值,N開頭的參數的屬性值為本次聲明的Queue的參數的屬性值。

可能原因

要調用的Queue的參數的已設定屬性值與本次聲明的Queue的參數的屬性值不一致,導致報QueueHasDiffField類型錯誤。可能出現不一致的Queue參數如下。

參數類型描述
queueStringQueue的名稱。
durablebooleanQueue是否持久化:
  • true:持久化類型,在雲訊息佇列 RabbitMQ 版用戶端重連雲訊息佇列 RabbitMQ 版服務端時被再次自動建立出來 。
  • false:非持久化類型,在雲訊息佇列 RabbitMQ 版用戶端重連雲訊息佇列 RabbitMQ 版服務端時不會被再次自動建立出來 。
說明 調用CreateQueue或在雲訊息佇列 RabbitMQ 版控制台Queue管理頁面建立的Queue預設為持久化Queue。
exclusivebooleanQueue是否具有排他性:
  • true:排他性類型,只對首次聲明其的Connection可見,且會在Connection斷開時自動刪除。
  • false:非排他性類型,對其他Connection可見,不會在Connection斷開時自動刪除。
autoDeletebooleanQueue是否自動刪除:
  • true:自動刪除類型,在最後一個Consumer取消訂閱後,自動刪除。
  • false:非自動刪除類型,即使最後一個Consumer取消訂閱後,也不會自動刪除。
argumentsMapQueue的其他參數。包括死信Exchange、死信Routing Key和訊息存活時間

例如要調用的Queue的autoDelete參數的已設定屬性值與本次聲明的Queue的autoDelete參數的屬性值不一致,導致報錯QueueHasDiffField[OAutoDelete=false&NAutoDelete=true;]。

  • 要調用的Queue的autoDelete參數的已設定屬性值為false。
    說明 您可以調用ListQueues或在雲訊息佇列 RabbitMQ 版控制台Queue管理頁面擷取要調用的Queue的參數的屬性值。
  • 本次聲明的Queue的autoDelete參數的屬性值為true。

    範例程式碼如下:

    channel.queueDeclare("test", false, false, true, null);

解決方案

在代碼中修改本次聲明Queue的參數的屬性值,使其與要調用的Queue的參數的已設定屬性值保持一致。例如,在代碼中將本次聲明的Queue的autoDelete參數的屬性值修改為false,使其與要調用的Queue的autoDelete參數的已設定屬性值保持一致。
範例程式碼如下:
channel.queueDeclare("test", false, false, false, null);