本文為您介紹ApsaraMQ for RabbitMQ串連失敗的幾種原因、排查思路和對應的解決方案。
串連失敗的可能原因
使用者名稱密碼錯誤:在ApsaraMQ for RabbitMQ中,使用者名稱密碼是建立串連時的認證憑證。在串連時要根據執行個體的身分識別驗證和許可權模式來建立使用者名稱和密碼。
開源身分識別驗證和許可權管理方式:自訂建立使用者名稱密碼。
阿里雲存取控制(RAM):根據阿里雲AK/SK產生的使用者名稱密碼。
許可權錯誤:根據執行個體的身分識別驗證和許可權模式判斷是否具備執行個體的操作許可權,否則串連將建立失敗。
開源身分識別驗證和許可權管理方式:判斷自訂使用者是否具備許可權。
阿里雲存取控制(RAM):判斷產生使用者名稱密碼的AK/SK的使用者是否具備許可權。
存取點填寫錯誤:若您在阿里雲內網環境下串連ApsaraMQ for RabbitMQ執行個體,可以在串連時填入VPC存取點。若在外網環境(如本地開發環境)下進行串連,請填公網存取點。
ApsaraMQ for RabbitMQ對應資源不存在:在串連時,請確保您的ApsaraMQ for RabbitMQ按預期狀態運行。Vhost等資源最好在控制台中提前建立完成。
解決辦法
確保使用者名稱密碼正確產生:
開源身分識別驗證和許可權管理方式:自訂使用者名稱密碼的建立,請參見建立使用者名稱密碼。
阿里雲存取控制(RAM):使用者名稱密碼的產生可以參考建立靜態使用者名稱密碼,請勿在串連時直接將AK/SK作為ApsaraMQ for RabbitMQ的使用者名稱密碼填入。
確保許可權已經正確授予:
開源身分識別驗證和許可權管理方式:自訂使用者的授權操作請參見許可權管理。
阿里雲存取控制(RAM):一般情況下,可以按照步驟一:(可選)RAM使用者授權,根據該文檔能夠針對AMQP服務進行整體的使用權限設定,如操作許可權、唯讀許可權。若需要更加複雜的許可權管控策略,如操作某些Vhost下的資源,具體請參見雲訊息佇列 RabbitMQ 版自訂權限原則參考。若許可權比較複雜,請盡量自行嘗試組合,以獲得您期望的許可權管控策略。
確保存取點填寫正確:
請在運行用戶端的環境下對存取點進行網路聯通性檢查,例如使用ping、telnet等工具。避免由於網路不通導致串連失敗。
確認串連建立的請求已經到達服務端:
建議開通ApsaraMQ for RabbitMQ的Log Service,具體請參見日誌管理。
在開通Log Service後,能夠查看到您執行個體下的操作是否被服務端接收到。
舉例來說,若您在測試環境中頻繁串連ApsaraMQ for RabbitMQ執行個體,但是未出現在該日誌中,則代表格服務端未接收到這些串連請求,便可以在用戶端邏輯、網路鏈路上進行排查。
根據錯誤碼進行排查:
若請求已經到達服務端,則可以根據日誌中的返回碼進行具體錯誤原因排查,具體請參見錯誤碼說明。
例如:
若返回403,AccessDeniedByRamPolicy,則可以從RAM授權方面進行排查。
若返回311,MessageBodyLengthExceeded,則可以從訊息體大小進行排查,查看是否有超限訊息體。
若返回404,ExchangeNotExist/QueueNotExist,則可以從資源角度進行排查,從日誌中查看不存在資源名稱,查看該資源是否存在,或建立資源。
若返回530,denied for too many requests/ExchangeNumExceeded/QueueNumExceeded/VhostNumExceeded,則可以從限流角度進行排查,查看購買執行個體是否需要升級規格,或者使用方式需要最佳化。
若返回541,則可以查看發布公告,一般該返回code只會出現在服務端發布升級的過程中。若影響業務請提交工單聯絡阿里雲支援人員解決。