本文为您介绍云消息队列 RabbitMQ 版客户端报QueueHasDiffField类型错误的原因和处理方法。
问题现象
使用云消息队列 RabbitMQ 版客户端连接云消息队列 RabbitMQ 版服务端时,报QueueHasDiffField类型错误。 例如QueueHasDiffField[OAutoDelete=false&NAutoDelete=true;] 。
说明 报错中O开头的参数的属性值为要调用的Queue的参数的已设置属性值,N开头的参数的属性值为本次声明的Queue的参数的属性值。
可能原因
要调用的Queue的参数的已设置属性值与本次声明的Queue的参数的属性值不一致,导致报QueueHasDiffField类型错误。可能出现不一致的Queue参数如下。
参数 | 类型 | 描述 |
queue | String | Queue的名称。 |
durable | boolean | Queue是否持久化:
说明 调用CreateQueue或在云消息队列 RabbitMQ 版控制台的Queue管理页面创建的Queue默认为持久化Queue。 |
exclusive | boolean | Queue是否具有排他性:
|
autoDelete | boolean | Queue是否自动删除:
|
arguments | Map | Queue的其他参数。包括死信Exchange、死信Routing Key和消息存活时间。 |
例如要调用的Queue的autoDelete参数的已设置属性值与本次声明的Queue的autoDelete参数的属性值不一致,导致报错QueueHasDiffField[OAutoDelete=false&NAutoDelete=true;]。
- 要调用的Queue的autoDelete参数的已设置属性值为false。说明 您可以调用ListQueues或在云消息队列 RabbitMQ 版控制台的Queue管理页面获取要调用的Queue的参数的属性值。
- 本次声明的Queue的autoDelete参数的属性值为true。
示例代码如下:
channel.queueDeclare("test", false, false, true, null);
解决方案
在代码中修改本次声明Queue的参数的属性值,使其与要调用的Queue的参数的已设置属性值保持一致。例如,在代码中将本次声明的Queue的autoDelete参数的属性值修改为false,使其与要调用的Queue的autoDelete参数的已设置属性值保持一致。
示例代码如下:
channel.queueDeclare("test", false, false, false, null);