全部產品
Search
文件中心

:ExchangeHasDiffFields

更新時間:Jun 30, 2024

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

問題現象

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

說明

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

可能原因

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

參數

類型

描述

exchange

String

Exchange的名稱。

type

String

Exchange的類型。取值:

  • fanout:該類型路由規則非常簡單,會把所有發送到該Exchange的訊息路由到所有與它綁定的Queue中,相當於廣播功能。

  • direct:該類型路由規則會將訊息路由到Routing Key完全符合的Queue中。

  • topic:該類型與direct類型相似,只是規則沒有那麼嚴格,可以模糊比對和多條件匹配,即該類型Exchange使用Routing Key模式比對和字串比較的方式將訊息路由至綁定的Queue。

durable

boolean

Exchange是否持久化。取值:

  • true:持久化類型,在雲訊息佇列 RabbitMQ 版用戶端重連雲訊息佇列 RabbitMQ 版服務端時被再次自動建立出來 。

  • false:非持久化類型,在雲訊息佇列 RabbitMQ 版用戶端重連雲訊息佇列 RabbitMQ 版服務端時不會被再次自動建立出來 。

說明

調用CreateExchange或在雲訊息佇列 RabbitMQ 版控制台Exchange管理頁面建立的Exchange預設為持久化Exchange。

autoDelete

boolean

Exchange是否自動刪除。取值:

  • true:自動刪除類型,在最後一個綁定的Queue取消綁定後,自動刪除。

  • false:非自動刪除類型,即使最後一個綁定的Queue取消綁定後,也不會自動刪除。

說明

調用CreateExchange或在雲訊息佇列 RabbitMQ 版控制台Exchange管理頁面建立的Exchange預設為非自動刪除類型。

internal

boolean

Exchange是否為Internal類型。預設值為false。取值:

  • true:內建類型,用於Exchange和Exchange之間的綁定。

  • false:非內建類型,用於Exchange和Queue之間的綁定。

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);