全部產品
Search
文件中心

ApsaraMQ for RabbitMQ:錯誤碼說明

更新時間:Sep 21, 2024

本文說明雲訊息佇列 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