本文说明云消息队列 RabbitMQ 版客户端调用AMQP 0-9-1协议时的返回码,您可以根据返回信息与解决方案自助排查错误。

返回码列表

返回码(reply-code)返回信息(reply-text)描述解决方案
200no route has mandatory调用basicPublish方法发送消息且设置mandatory=true时,如果Exchange根据自身类型和消息的RoutingKey无法匹配到合适的Queue存储消息,Broker会调用basic.return方法将消息返回给生产者。请检查Exchange下的Binding是否设置正确。
311MessageBodyLengthExceeded消息大小超过限制。确保您发送的消息的大小在不超过云消息队列 RabbitMQ 版的限制值。更多信息,请参见使用限制
320ProtocolVersionMismatch协议版本不正确,当前只支持AMQP 0-9-1协议。确保您使用的协议版本为AMQP 0-9-1。
403AccessDeniedByRamPolicy权限错误。确保您的RAM用户已被授予相应权限。更多信息,请参见RAM权限策略
404ExchangeNotExistExchange不存在。
  • 确保指定的Exchange已被创建。
  • 确保您输入的Exchange拼写正确。
QueueNotExistQueue不存在。
  • 确保指定的Queue已被创建。
  • 确保您输入的Queue拼写正确。
405QueueExclusive当前队列是排他队列。该队列仅对首次连接的Connection可见,不支持通过其他Connection访问。
406QueueConsumerNameInvalid队列消费者名称不符合规范。确保您输入的消费者名称拼写正确且符合规范。具体规范,请参见字符限制
ExchangeNameEmptyExchange名称为空。请输入Exchange名称,并确保您输入的Exchange已创建。具体规范,请参见字符限制
QueueHasDiffField本地声明中Queue的属性与要调用的目标Queue属性不同。修改本地声明中Queue的参数值,使其与要调用的目标Queue属性保持一致。具体操作,请参见QueueHasDiffField
BindingNameInvalidBinding Key名称不符合规范。确保您输入的Binding Key拼写正确且符合规范。具体规范,请参见字符限制
ExchangeInBuilt内置Exchange,不允许创建。请您修改Exchange名称。以amp.开头的Exchange为系统内置Exchange,不允许您创建。
QueueNameInvalidQueue名称不符合规范。确保您输入的Queue名称拼写正确且符合规范。具体规范,请参见字符限制
MessageBodyEmpty消息体内容为空。请输入消息内容。
503ExchangeTypeNotSupport[x-delayed-message]使用代码方式创建x-delayed-message类型的Exchange时,参数设置错误。重点检查Exchange类型和x-delay-type参数值设置是否正确。正确示例如下:
  • arguments.put("x-delayed-type", "只能取值direct、topic、fanout、headers、x-jms-topic其中一种");
  • channel.exchangeDeclare("${exchangeName}", "只能取值x-delayed-message", true, false, arguments);
530ExchangeHasDiffFields本地声明中Exchange的属性与要调用的目标Exchange属性不同。修改本地声明中Exchange的参数值,使其与要调用的目标Exchange属性保持一致。具体操作,请参见ExchangeHasDiffFields
denied for too many requests消息收发TPS峰值超过规格限制,请求被限流。
  • 进行流量控制,确保消息收发TPS不超过规格限制。更多信息,请参见实例限流最佳实践
  • 升级实例规格,提高TPS流量峰值。具体限制值,请参见使用限制
VhostNumExceeded单实例的Vhost数量超过限制。
  • 删除不再使用的Vhost。
  • 升级实例规格,提高Vhost数量上限。具体限制值,请参见使用限制
ExchangeNumExceeded单Vhost的Exchange数量超过限制。
  • 删除不再使用的Vhost。
  • 升级实例规格,提高Exchange数量上限。具体限制值,请参见使用限制
QueueNumExceeded单实例的Queue数量超过限制。
VHostTotalBindingNumExceeded单Vhost的Binding数量超过限制。
ExchangeBindingNumExceeded单Exchange绑定的Queue数量超过限制。解除不再使用的Queue的绑定关系。
QueueConsumerNumExceeded单Queue的Consumer数量超过限制。
ChannelNumExceeded单Connection的Channel数量超过限制。关闭不再使用的Producer或Consumer进程。
AccessAccountDataError用户名密码验证错误。
  • 请检查静态用户名密码是否填写正确。
  • 请检查静态用户名密码是否归属于当前实例。
  • 请检查创建静态用户名密码的Accessey ID、Accesskey Secret是否正确。
541InternalError服务端内部错误。根据返回信息的错误原因定位问题后,提交工单联系云消息队列 RabbitMQ 版技术人员获取帮助。

返回信息示例

Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>
(reply-code=404, reply-text=ExchangeNotExist, ReqId:5FB4C999314635F952FCBFF6, ErrorHelp[dstQueue=XXX_test_queue,
srcExchange=Producer.ExchangeName,bindingKey=XXX_test_bk, http://mrw.so/6rNqO8], class-id=50, method-id=20)
    at com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:516)
    at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:346)
    at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:182)
    at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:114)
    at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:672)
    at com.rabbitmq.client.impl.AMQConnection.access$300(AMQConnection.java:48)
    at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:599)
    at java.lang.Thread.run(Thread.java:748)

返回信息说明

参数描述示例值
reply-code返回码。404
reply-text返回信息。ExchangeNotExist
ReqId:请求ID。5FB4C999314635F952FCBFF6
ErrorHelp错误辅助排查信息。包括:
  • 发生错误时的相关元数据信息。
  • AMQP协议方法返回信息参考文档链接。
说明 为提高性能并减少内存开销,BasicPublish接口发生错误时,ErrorHelp只提供msgId,而不提供kv结构的错误辅助排查信息,您可以根据msgId来排查。
[dstQueue=XXX_test_queue,srcExchange=Producer.ExchangeName,bindingKey=XXX_test_bk,http://mrw.so/6rNqO8]
class-id类ID(与开源RabbitMQ相同)。50
method-id方法ID(与开源RabbitMQ相同)。20