介绍云消息队列 RabbitMQ 版客户端报ExchangeHasDiffFields类型错误的原因和处理方法。
问题现象
使用云消息队列 RabbitMQ 版客户端连接云消息队列 RabbitMQ 版服务端时,报ExchangeHasDiffFields类型错误。例如ExchangeHasDiffFields[ODurable=true&NDurable=false;]。
报错中O开头的参数的属性值为要调用的Exchange的参数的已设置属性值,N开头的参数的属性值为本次声明的Exchange的参数的属性值。
可能原因
要调用的Exchange的参数的已设置属性值与本次声明的Exchange的参数的属性值不一致,导致报ExchangeHasDiffField类型错误。可能出现不一致的Exchange参数如下:
参数 | 类型 | 描述 |
exchange | String | Exchange的名称。 |
type | String | Exchange的类型。取值:
|
durable | boolean | Exchange是否持久化。取值:
说明 调用CreateExchange或在云消息队列 RabbitMQ 版控制台的Exchange管理页面创建的Exchange默认为持久化Exchange。 |
autoDelete | boolean | Exchange是否自动删除。取值:
说明 调用CreateExchange或在云消息队列 RabbitMQ 版控制台的Exchange管理页面创建的Exchange默认为非自动删除类型。 |
internal | boolean | Exchange是否为Internal类型。默认值为false。取值:
|
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);