文档

ExchangeHasDiffFields

更新时间:
一键部署

介绍云消息队列 RabbitMQ 版客户端报ExchangeHasDiffFields类型错误的原因和处理方法。

问题现象

使用云消息队列 RabbitMQ 版客户端连接云消息队列 RabbitMQ 版服务端时,报ExchangeHasDiffFields类型错误。例如ExchangeHasDiffFields[ODurable=true&NDurable=false;]。

说明 报错中O开头的参数的属性值为要调用的Exchange的参数的已设置属性值,N开头的参数的属性值为本次声明的Exchange的参数的属性值。

可能原因

要调用的Exchange的参数的已设置属性值与本次声明的Exchange的参数的属性值不一致,导致报ExchangeHasDiffField类型错误。可能出现不一致的Exchange参数如下:

参数类型描述
exchangeStringExchange的名称。
typeStringExchange的类型。取值:
  • fanout:该类型路由规则非常简单,会把所有发送到该Exchange的消息路由到所有与它绑定的Queue中,相当于广播功能。
  • direct:该类型路由规则会将消息路由到Binding Key与Routing Key完全匹配的Queue中。
  • topic:该类型与direct类型相似,只是规则没有那么严格,可以模糊匹配和多条件匹配,即该类型Exchange使用Routing Key模式匹配和字符串比较的方式将消息路由至绑定的Queue。
durablebooleanExchange是否持久化。取值:
  • true:持久化类型,在云消息队列 RabbitMQ 版客户端重连云消息队列 RabbitMQ 版服务端时被再次自动创建出来 。
  • false:非持久化类型,在云消息队列 RabbitMQ 版客户端重连云消息队列 RabbitMQ 版服务端时不会被再次自动创建出来 。
说明 调用CreateExchange或在云消息队列 RabbitMQ 版控制台Exchange管理页面创建的Exchange默认为持久化Exchange。
autoDeletebooleanExchange是否自动删除。取值:
  • true:自动删除类型,在最后一个绑定的Queue取消绑定后,自动删除。
  • false:非自动删除类型,即使最后一个绑定的Queue取消绑定后,也不会自动删除。
说明 调用CreateExchange或在云消息队列 RabbitMQ 版控制台Exchange管理页面创建的Exchange默认为非自动删除类型。
internalbooleanExchange是否为Internal类型。默认值为false。取值:
  • true:内建类型,用于Exchange和Exchange之间的绑定。
  • false:非内建类型,用于Exchange和Queue之间的绑定。
argumentsMapExchange其他参数。包括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);
  • 本页导读 (1)
文档反馈