介紹雲訊息佇列 RabbitMQ 版用戶端報ExchangeHasDiffFields類型錯誤的原因和處理方法。
問題現象
使用雲訊息佇列 RabbitMQ 版用戶端串連雲訊息佇列 RabbitMQ 版服務端時,報ExchangeHasDiffFields類型錯誤。例如ExchangeHasDiffFields[ODurable=true&NDurable=false;]。
報錯中O開頭的參數的屬性值為要調用的Exchange的參數的已設定屬性值,N開頭的參數的屬性值為本次聲明的Exchange的參數的屬性值。
可能原因
要調用的Exchange的參數的已設定屬性值與本次聲明的Exchange的參數的屬性值不一致,導致報ExchangeHasDiffField類型錯誤。可能出現不一致的Exchange參數如下:
參數 | 類型 | 描述 |
exchange | String | Exchange的名稱。 |
type | String | Exchange的類型。取值:
|
durable | boolean | Exchange是否持久化。取值:
說明 調用CreateExchange或在雲訊息佇列 RabbitMQ 版控制台的Exchange管理頁面建立的Exchange預設為持久化Exchange。 |
autoDelete | boolean | Exchange是否自動刪除。取值:
說明 調用CreateExchange或在雲訊息佇列 RabbitMQ 版控制台的Exchange管理頁面建立的Exchange預設為非自動刪除類型。 |
internal | boolean | Exchange是否為Internal類型。預設值為false。取值:
|
arguments | Map | Exchange其他參數。包括Alternate Exchange。 |
例如要調用的Exchange的durable參數的已設定屬性值與本次聲明的Exchange的durable參數的屬性值不一致,導致報錯ExchangeHasDiffFields[ODurable=true&NDurable=false;]。
要調用的Exchange的durable參數的已設定屬性值為false。
說明您可以調用ListExchanges或在雲訊息佇列 RabbitMQ 版控制台的Exchange管理頁面擷取要調用的Exchange的參數的屬性值。
本次聲明的Exchange的durable參數的屬性值為true。
範例程式碼如下:
channel.exchangeDeclare("test", "direct", false, false, false, null);
解決方案
在代碼中修改本次聲明Exchange的參數的屬性值,使其與要調用的Exchange的參數的已設定屬性值保持一致。例如,在代碼中將本次聲明的Exchange的durable參數的屬性值修改為false,使其與要調用的Exchange的durable參數的已設定屬性值保持一致。
範例程式碼如下:
channel.exchangeDeclare("test", "direct", true, false, false, null);