错误码说明

更新时间:

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

返回码列表

返回码(reply-code)

返回信息(reply-text)

描述

解决方案

200

no route has mandatory

调用basicPublish方法发送消息且设置mandatory=true时,如果Exchange根据自身类型和消息的RoutingKey无法匹配到合适的Queue存储消息,Broker会调用basic.return方法将消息返回给生产者。

请检查Exchange下的Binding是否设置正确。

311

MessageBodyLengthExceeded

消息大小超过限制。

确保您发送的消息的大小在不超过云消息队列 RabbitMQ 版的限制值。更多信息,请参见使用限制

320

ProtocolVersionMismatch

协议版本不正确,当前只支持AMQP 0-9-1协议。

确保您使用的协议版本为AMQP 0-9-1。

403

AccessDeniedByRamPolicy

权限错误。

确保您的RAM用户已被授予相应权限。更多信息,请参见RAM权限策略

404

ExchangeNotExist

Exchange不存在。

  • 确保指定的Exchange已被创建。

  • 确保您输入的Exchange拼写正确。

QueueNotExist

Queue不存在。

  • 确保指定的Queue已被创建。

  • 确保您输入的Queue拼写正确。

405

QueueExclusive

当前队列是排他队列。

该队列仅对首次连接的Connection可见,不支持通过其他Connection访问。

406

QueueConsumerNameInvalid

队列消费者名称不符合规范。

确保您输入的消费者名称拼写正确且符合规范。具体规范,请参见字符限制

ExchangeNameEmpty

Exchange名称为空。

请输入Exchange名称,并确保您输入的Exchange已创建。具体规范,请参见字符限制

QueueHasDiffField

本地声明中Queue的属性与要调用的目标Queue属性不同。

修改本地声明中Queue的参数值,使其与要调用的目标Queue属性保持一致。具体操作,请参见QueueHasDiffField

BindingNameInvalid

Routing Key名称不符合规范。

确保您输入的Routing Key拼写正确且符合规范。具体规范,请参见字符限制

ExchangeInBuilt

内置Exchange,不允许创建。

请您修改Exchange名称。以amp.开头的Exchange为系统内置Exchange,不允许您创建。

QueueNameInvalid

Queue名称不符合规范。

确保您输入的Queue名称拼写正确且符合规范。具体规范,请参见字符限制

MessageBodyEmpty

消息体内容为空。

请输入消息内容。

503

ExchangeTypeNotSupport[x-delayed-message]

使用代码方式创建x-delayed-message类型的Exchange时,参数设置错误。

重点检查Exchange类型和x-delay-type参数值设置是否正确。正确示例如下:

  • arguments.put("x-delayed-type", "只能取值direct、topic、fanout、headers其中一种");

  • channel.exchangeDeclare("${exchangeName}", "只能取值x-delayed-message", true, false, arguments);

504

ChannelNotFind

传输信息到服务端时,Channel已经被清理。

多个进程共享Connection且频繁建立和关闭连接会返回该错误码。

如果您使用的SpringBoot集成方式且连接工厂为CONNECTION模式,您可以适当调整spring.rabbitmq.cache.connection.size(Connection的缓存数量),使客户端不会频繁建立和关闭连接。

530

ExchangeHasDiffFields

本地声明中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进程。

QueueConsumerAlreadyExist

单Queue上已经存在相同消费者。

相同的Channel上进行BasicConsume时指定不同的ConsumerTag值。

AccessAccountDataError

用户名密码验证错误。

  • 请检查静态用户名密码是否填写正确。

  • 请检查静态用户名密码是否归属于当前实例。

  • 请检查创建静态用户名密码的AccessKey ID、AccessKey Secret是否正确。

541

InternalError

服务端内部错误。

根据返回信息的错误原因定位问题后,提交工单联系云消息队列 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,routingKey=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,routingKey=XXX_test_bk,http://mrw.so/6rNqO8]

class-id

类ID(与开源RabbitMQ相同)。

50

method-id

方法ID(与开源RabbitMQ相同)。

20