AliyunAMQPReadOnlyAccess 為什麼不支援查詢隊列訊息?
AliyunAMQPReadOnlyAccess 策略只有"amqp:Get*"和"amqp:List*"的許可權,可以添加 amqp:BasicGet 自訂許可權,用於訪問隊列中的訊息。請參見雲訊息佇列 RabbitMQ 版自訂權限原則參考。
{
"Version": "1",
"Statement": [
{
"Action": [
"amqp:BasicGet"
],
"Resource": [
"acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*"
],
"Effect": "Allow"
}
]
}清空隊列後控制台為什麼仍顯示有堆積訊息?
清空隊列操作預設不會清除延時訊息。
QoS 生效機制?
如果存在逾時阻塞的情況,建議將 QoS 或 Prefetch Count 設定為 1,避免用戶端緩衝過多訊息同時到期。
什麼時候訊息會進死信?
如果一條訊息沒有設定 TTL,該訊息進入無效信件佇列僅有兩種情況:1. 被 NACK,2. 消費重試次數達到上限。
如何設定訊息ID?
請參見如何設定Message ID。
無效信件佇列裡的訊息量為什麼會減少?
雲訊息佇列 RabbitMQ 版訊息最長保留 3 天。如果訊息超過 3 天未被消費,無效信件佇列中的訊息量也會隨之減少。請參見使用限制。
訊息保留時間長度?
雲訊息佇列 RabbitMQ 版成功消費與未成功消費的所有訊息的最大保留時間長度為 3 天。請參見使用限制。
RabbitMQ 的網段?
雲訊息佇列 RabbitMQ 版的網段不固定,無法提前擷取固定網段資訊。
自動刪除隊列為什麼沒有生效?
如果消費者未成功訂閱隊列,調用 channel.close 不會觸發隊列的自動刪除。需要通過 channel.basicConsume 成功訂閱消費後,自動刪除隊列的邏輯才會生效。
儲存費用是什嗎?
雲訊息佇列 RabbitMQ 版的訊息保留時間長度為 3 天,儲存費用基於訊息體的儲存量計算。該儲存空間無法手動清理的,只能等待訊息到期後自動釋放。
清空隊列的實際操作是重設消費位點。清空後仍可查看歷史訊息,因此清空隊列後儲存空間不會減少。
清空隊列是什嗎?
清空隊列的實際操作是重設消費位點(跳過未消費的訊息),而不是刪除訊息。清空後仍可查看歷史訊息。
Queue 每秒流出訊息數取決於什嗎?
Queue 每秒流出訊息數取決於訊息量、消費者數量及消費者設定的 QoS。
使用排他隊列時需要注意什嗎?
Spring 架構使用CONNECTION模式時,需要提前在控制台建立 Exchange、Queue 及綁定關係。CONNECTION 模式下不會自動聲明和建立這些資源。
如果訊息進入隊列, 然後重試16次, 那麼收費是一次的費用還是16次的費用呢?
僅收取一次費用。後續重新入隊再消費不再額外計費,僅對初始推送計費一次。
重入隊是指消費失敗後,訊息重新進入服務端的隊列等待消費。服務端有專門的重試隊列,會按照一定的時間間隔重新向消費者推送訊息。
TPS 上限對應哪個監控?
對應CloudMonitor中的執行個體 API 請求速率峰值。
Connection 串連數可以超過限制嗎?
對於 Connection 串連數限制,雖然官方文檔中標註為執行個體層級的限制,但實際是按後台節點維度進行限制,執行個體層級串連總數可能少量超過限制值。
對於預付費執行個體,各項配置均不可動態調整,建議在建立執行個體時合理規劃資源,避免因資源超限導致業務異常。
生產和消費速率一致,為什麼監控還是顯示有堆積?
實際發送和消費速率基本匹配,但部分訊息的 ACK 耗時較長,導致監控在某個採樣時間點統計到一定的堆積量。在下一個採樣周期,堆積通常會恢複正常。
某些 Pod 的消費量為什麼突然下降了?
建議排查 Pod 的效能情況。可能因 CPU 使用率過高,導致用戶端未能及時提交 ACK。服務端在未收到 ACK 的情況下無法繼續推送訊息,需要等待逾時後重新推送,從而導致消費量下降。
例如 QoS 設定為1,那麼只允許該消費者在同一時間有1 條訊息未 ACK;服務端需要等待消費者處理完訊息並提交 ACK 後,才能推送下一條訊息。如果未收到 ACK,則只能等待逾時後才能推送下一條。
RabbitMQ 可以使用預設密鑰的主要金鑰嗎?
可以。
報錯 The channelMax limit is reached?
服務端只會對單個 Connection 上的 Channel 數量有限制,不會對總的 Channel 數量有限制;
從 SDK 代碼來看,只要createChannel返回null,都會列印“The channelMax limit is reached”;
升配後需要重啟用戶端,否則用戶端在建立串連時仍使用升配前的 Channel 數量限制,會繼續報錯。
比如:執行個體購買的時候Channel Max 為 100,用戶端在建立串連時會與服務端進行參數協商,最終採用服務端提供的 100 的限制;由於這些串連在升配之前就已建立,其協商的 Channel Max 值仍為 100,而非升配後的 2000 或 2500,因此會繼續觸發報錯。
Channel 參數協商過程示意
提升 TPS 會影響現有業務嗎?
不會。通過控制台升配提升 TPS 時,不會導致串連閃斷或已有串連斷開。
建立 Connection 時,會有可能導致其他 Channel Shutdown 嗎?
通常不會。但如果用戶端資源(網路、記憶體、JVM)不足,可能導致其他串連或通道中斷。建議重點排查用戶端的資源使用方式,確認是否存在資源搶佔或資源不足導致串連或通道中斷的問題。
Queue 的消費者突然消失了?
建議優先檢查該時間段內用戶端的業務和資源情況,確認是否存在進程掛起或資源不足導致業務中斷的問題。如果用戶端運行正常,需要進一步確認服務端的訊息推送是否正常。
隊列清空訊息未生效的原因?
1)Unacked 訊息無法通過清空隊列操作清除。Unacked 訊息是指已推送到用戶端但尚未提交 ACK 的訊息,其數量會在訊息到期後自動更新
2)如果設定了 TTL 的訊息未被清除,請提交工單確認是否已開啟相關配置開關
雲上 RabbitMQ 執行個體目前不支援 reply-to?
雲上 RabbitMQ 執行個體目前不支援 reply-to。
用戶端日誌如何計算 TPS?
對應 SQL 陳述式為:
* and amqp-cn-xxx and Action : SendMessage | select InstanceId as instance_id, VHost as virtual_host, Queue as queue, microtime / 1000 / 1000 as time_second, count(*) as send_qps group by instance_id, virtual_host, queue, time_second order by time_second, send_qps limit 10000000統計結果樣本:
RabbitMQ 修改日誌 Logstore 之後為什麼查看日誌為空白?
在新的 Logstore 中點擊【開啟索引】,等待約一分鐘後重新整理頁面即可查看日誌。
操作步驟:
1)點擊開啟索引
2)直接【確定】即可
RabbitMQ 斷連的可能原因?
如果用戶端提交的有效 ACK 數量較少,服務端因未收到有效應答,會重複投遞訊息,導致訊息堆積持續不下降。
而且這種情況下,表明訊息在用戶端堆積,可能導致串連無法發送心跳包,最終觸發 Connection ALL_IDLE,串連斷開。請優先排查用戶端未能提交有效 ACK 的原因。
TTL 相關設定?
TTL 最大支援設定為 3 天,超過 3 天的設定將不生效。TTL 不生效時,訊息到期後不會進入無效信件佇列,並可能出現各種不符合預期的行為。
1)如果未設定 TTL,隊列中均為普通訊息,監控中的 readyMessage 指標即為普通訊息的數量,也就是實際堆積量。
2)如果設定了 TTL,監控中的 readyMessage 指標表示存活訊息的數量:
a) 如果 TTL 正常生效,隊列中的存活訊息數量根據 TTL 動態計算,監控中的 readyMessage 即為實際存活訊息數量,屬於正常現象。
b)如果 TTL 已設定但未生效,存活訊息數量始終為 0,監控中的 readyMessage 也始終顯示為 0,無法反映實際堆積情況。
報錯 java.lang.IllegalArgumentException: Content headers exceeded max frame size: 40209 > 32768?
訊息頭部的幀大小超過限制。訊息頭部(Header)的預設大小限制為 32 KB,該限制在服務端無法調整。
建議將較長的資料從 Header 移至 Body 中,避免超出 Header 幀大小限制。
為什麼清空隊列還是可以查到訊息?
清空隊列後查詢訊息功能檢索的是日誌資料,日誌的儲存時間較長,因此仍可查詢到歷史訊息。
解除綁定訂閱關係報錯?
原因:
排他隊列僅對首次聲明它的串連可見,只能由建立該排他隊列的串連進行刪除操作,無法通過控制台操作。
詳情請參見排他隊列。
解決方案:
1)如果不再需要該排他隊列,斷開對應串連後,排他隊列將被自動刪除,其綁定關係也會一併移除。
2)如果無法找到建立該排他隊列的 Connection ID,可以通過重啟用戶端來刪除排他隊列。
報錯:VPC flow is not allowed to login in?
報錯原因:
服務端檢測到使用的使用者名稱密碼不是通過控制台產生的靜態使用者名稱密碼,將請求流量誤判為開源鑒權流量,因此拒絕串連。
解決方案:
確認 VPC 存取點連通性後,請確認使用的使用者名稱和密碼是在控制台上產生的靜態使用者名稱密碼。如有疑問,建議重建使用者名稱密碼,確保配置正確。
如何?跨地區內網訪問?
跨地區內網訪問的標準方案是使用 PrivateLink + CEN 方案;
請注意:使用該方案會產生 PrivateLink 的費用; 如需使用,請提交工單申請開通私網存取點,開通後可在控制台進行配置。操作時請注意 vSwitch 可用性區域和安全性群組配置。
詳情請參見私網串連存取點。