問題描述
在使用Event Hub SDK消費資料過程中,出現大量的Timeout Exception,詳細消息為:
com.microsoft.azure.eventhubs.TimeoutException: Entity(xxxxxx): Send operation timed out at 2022-08-15T00:50:12.346Z[Etc/UTC]., errorContext[NS: XXX-XXX.servicebus.chinacloudapi.cn, PATH: XXXXXX, REFERENCE_ID: 43E72AB75C05F043E92D9383B72E962A_G2, LINK_CREDIT: 0]
LINK_CREDIT解釋
(Source Link: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-amqp-protocol-guide#flow-control)
以上内容主要解釋了 Event Hub使用AMQP協定時,用戶端會根據AMQP的架構先建立Connection,然後時Session,最後是Link。而Send/Receive Message就發生在所建立的Link中。
Network Connection:
Session & Link
而在Link中,它通過LINK_CREDIT來進行流量控制:
- 在LINK上,傳輸隻發生于發送者有足夠的“LINK_CREDIT(連結信用額度)”時。
- LINK_CREDIT是接收者使用流程行為原語所設定的計數器,其範圍是連結。
- 将LINK_CREDIT配置設定給發送者時,将通過傳遞消息來嘗試用完LINK_CREDIT額度。
- 每個消息傳遞使剩餘的LINK_CREDIT減 1。 當LINK_CREDIT為0時,便會停止傳遞。
參考文檔
AMQP 1.0 in Azure Service Bus and Event Hubs protocol guide : https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-amqp-protocol-guide#flow-control
[END]
當在複雜的環境中面臨問題,格物之道需:濁而靜之徐清,安以動之徐生。 雲中,恰是如此!