本文為您介紹雲訊息佇列 RabbitMQ 版用戶端報QueueHasDiffField類型錯誤的原因和處理方法。
問題現象
使用雲訊息佇列 RabbitMQ 版用戶端串連雲訊息佇列 RabbitMQ 版服務端時,報QueueHasDiffField類型錯誤。 例如QueueHasDiffField[OAutoDelete=false&NAutoDelete=true;] 。
說明 報錯中O開頭的參數的屬性值為要調用的Queue的參數的已設定屬性值,N開頭的參數的屬性值為本次聲明的Queue的參數的屬性值。
可能原因
要調用的Queue的參數的已設定屬性值與本次聲明的Queue的參數的屬性值不一致,導致報QueueHasDiffField類型錯誤。可能出現不一致的Queue參數如下。
參數 | 類型 | 描述 |
queue | String | Queue的名稱。 |
durable | boolean | Queue是否持久化:
說明 調用CreateQueue或在雲訊息佇列 RabbitMQ 版控制台的Queue管理頁面建立的Queue預設為持久化Queue。 |
exclusive | boolean | Queue是否具有排他性:
|
autoDelete | boolean | Queue是否自動刪除:
|
arguments | Map | Queue的其他參數。包括死信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);