すべてのプロダクト
Search
ドキュメントセンター

ApsaraMQ for RabbitMQ:ApsaraMQ for RabbitMQ クライアントで報告される ExchangeHasDiffFields エラーのトラブルシューティング方法

最終更新日:May 10, 2025

このトピックでは、ApsaraMQ for RabbitMQ クライアントで報告される ExchangeHasDiffFields エラーの原因とトラブルシューティング方法について説明します。

問題の説明

ApsaraMQ for RabbitMQ クライアントから ApsaraMQ for RabbitMQ ブローカーにアクセスしようとすると、ExchangeHasDiffFields[ODurable=true&NDurable=false;] などの ExchangeHasDiffFields エラーが報告されます。

説明

エラー情報では、O で始まるパラメーターは使用する Exchange の属性値を示し、N で始まるパラメーターは宣言された Exchange の属性値を示します。

原因

使用する Exchange の属性値が、宣言された Exchange の属性値と一致しません。次の表に、一致しない可能性のある属性パラメーターを示します。

パラメーター

種類

説明

exchange

String

Exchange 名。

type

String

Exchange の種類。有効な値:

  • fanout: この種類の Exchange は、受信したすべてのメッセージを、この Exchange にバインドされているすべてのキューにルーティングします。 fanout exchange を使用してメッセージをブロードキャストできます。

  • direct: この種類の Exchange は、ルーティングキーがメッセージのルーティングキーと完全に同じであるキューにメッセージをルーティングします。

  • topic: この種類は direct exchange 種類に似ています。この種類の Exchange は、メッセージのルーティングキーと現在の Exchange のルーティングキーの間のあいまい一致または複数条件一致の結果に基づいて、1 つ以上のキューにメッセージをルーティングします。

durable

boolean

Exchange が永続的かどうかを指定します。有効な値:

  • true: クライアントが ApsaraMQ for RabbitMQ ブローカーに再接続すると、Exchange は自動的に復元されます。このオプションは、金融取引通知や注文処理など、信頼性要件の高い、長時間実行されるビジネスシナリオに適しています。

  • false: クライアントが ApsaraMQ for RabbitMQ ブローカーに再接続すると、Exchange は自動的に復元されません。このオプションは、テストや短期タスクなど、信頼性要件の低い一時的なビジネスシナリオに適しています。

説明

CreateExchange API 操作を呼び出すか、取引所ApsaraMQ for RabbitMQ コンソールの [Exchange] ページで作成されたかどうかに関係なく、デフォルトでは Exchange は永続的です。

autoDelete

boolean

Exchange を自動的に削除できるかどうかを指定します。有効な値:

  • true: 最後にバインドされたキューが Exchange からバインド解除されると、Exchange は自動的に削除されます。

  • false: 最後にバインドされたキューが Exchange からバインド解除された後も、Exchange は自動的に削除されません。

説明

CreateExchange API 操作を呼び出すか、取引所ApsaraMQ for RabbitMQ コンソールの [Exchange] ページで作成されたかどうかに関係なく、デフォルトでは Exchange は自動的に削除されません。

internal

boolean

Exchange が内部 Exchange かどうかを指定します。デフォルト値:false。有効な値:

  • true: Exchange は別の Exchange にバインドされています。

  • false: Exchange はキューにバインドされています。

arguments

Map

代替 Exchange など、Exchange のその他のパラメーター。

たとえば、使用する Exchange の durable パラメーターの値が、宣言された Exchange の durable パラメーターの値と一致しない場合、ExchangeHasDiffFields[ODurable=true&NDurable=false;] が報告されます。

  • 使用する Exchange の durable パラメーターの値は false です。

    説明

    ListExchanges API 操作を呼び出すか、取引所ApsaraMQ for RabbitMQ コンソールの [Exchange] ページで操作を実行して、使用する Exchange の属性パラメーターの値を取得できます。

  • 宣言された Exchange の durable パラメーターの値は true です。

    サンプルコード:

    channel.exchangeDeclare("test", "direct", false, false, false, null); // durable パラメーターは false

解決策

宣言コードで不一致の値を変更し、値が使用する Exchange の値と一致するようにします。次の例では、durable パラメーターの値を false に変更しています。

サンプルコード:

channel.exchangeDeclare("test", "direct", true, false, false, null); // durable パラメーターは true