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

返回码列表

返回码(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 Binding Key名称不符合规范。 确保您输入的Binding 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、x-jms-topic其中一种");
  • channel.exchangeDeclare("${exchangeName}", "只能取值x-delayed-message", true, false, arguments);
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进程。
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,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