このトピックでは、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 の種類。有効な値:
|
durable | boolean | Exchange が永続的かどうかを指定します。有効な値:
説明 CreateExchange API 操作を呼び出すか、取引所ApsaraMQ for RabbitMQ コンソールの [Exchange] ページで作成されたかどうかに関係なく、デフォルトでは Exchange は永続的です。 |
autoDelete | boolean | Exchange を自動的に削除できるかどうかを指定します。有効な値:
説明 CreateExchange API 操作を呼び出すか、取引所ApsaraMQ for RabbitMQ コンソールの [Exchange] ページで作成されたかどうかに関係なく、デフォルトでは Exchange は自動的に削除されません。 |
internal | boolean | Exchange が内部 Exchange かどうかを指定します。デフォルト値:false。有効な値:
|
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