このトピックでは、ApsaraMQ for RabbitMQ クライアントで報告される QueueHasDiffField エラーの原因とトラブルシューティング方法について説明します。
症状
ApsaraMQ for RabbitMQ クライアントから ApsaraMQ for RabbitMQ ブローカーにアクセスしようとすると、QueueHasDiffField[OAutoDelete=false&NAutoDelete=true;] などの QueueHasDiffField エラーが報告されます。
エラー情報では、O で始まるパラメーターは使用するキューの属性値を示し、N で始まるパラメーターは宣言されたキューの属性値を示します。
原因
使用するキューの属性値が、宣言されたキューの属性値と一致しません。次の表に、一致しない可能性のある属性パラメーターを示します。
パラメーター | データ型 | 説明 |
queue | String | キューの名前。 |
durable | Boolean | キューが永続的かどうかを指定します。
説明 CreateQueue API オペレーションを呼び出すか、キューApsaraMQ for RabbitMQ コンソールの キュー ページで操作を実行するかに関係なく、デフォルトではキューは永続的です。 |
exclusive | Boolean | キューが排他的かどうかを指定します。
|
autoDelete | Boolean | キューを自動的に削除できるかどうかを指定します。
|
arguments | Map |
たとえば、使用するキューの autoDelete の値が、宣言されたキューの値と一致しない場合、QueueHasDiffField[OAutoDelete=false&NAutoDelete=true;] が報告されます。
使用するキューの autoDelete の値は false です。
説明ListQueues API オペレーションを呼び出すか、キューApsaraMQ for RabbitMQ コンソールの キュー ページで操作を実行することで、キューの属性パラメーターの値を取得できます。
宣言されたキューの autoDelete の値は true です。
サンプルコード:
channel.queueDeclare("test", false, false, true, null); // キューを宣言する
解決策
宣言コードで一致しない値を変更し、使用するキューの値と一致するようにします。この例では、autoDelete の値を false に変更します。
サンプルコード:
channel.queueDeclare("test", false, false, false, null); // autoDelete を false に変更する