Azure Event Hub(Azure事件中心) 是大數(shù)據(jù)流式處理平臺(tái)和事件引入服務(wù)憋活。 它可以每秒接收和處理數(shù)百萬個(gè)事件穴张。在我們的使用中衍腥,需要代碼編寫的是兩個(gè)部分:事件生產(chǎn)者和事件接收者
事件生成者:向事件中心發(fā)送數(shù)據(jù)的所有實(shí)體蚪缀。?事件發(fā)布者可以使用 HTTPS疹启、AMQP 1.0 或 Apache Kafka(1.0 和更高版本)發(fā)布事件。
事件接收者:從事件中心讀取事件數(shù)據(jù)的所有實(shí)體煎殷。?所有事件中心使用者通過 AMQP 1.0 會(huì)話進(jìn)行連接屯伞。?事件中心服務(wù)在事件變得可用時(shí)通過會(huì)話來提供事件。?所有 Kafka 使用者都通過 Kafka 協(xié)議 1.0 及更高版本進(jìn)行連接豪直。
下圖顯示了事件中心流處理體系結(jié)構(gòu):
(其他組件說明:https://docs.azure.cn/zh-cn/event-hubs/event-hubs-about#key-architecture-components)
問題描述
在使用事件生產(chǎn)者或接收者時(shí)劣摇,都需要與Event Hub服務(wù)建立連接。那么只要建立了連接弓乙,都需要考慮連接空閑超時(shí)參數(shù)末融。當(dāng)發(fā)生Timout后,EventHubClient的表現(xiàn)是什么呢暇韧?有什么日志輸出呢勾习?同時(shí),當(dāng)新的消息需要發(fā)送時(shí)懈玻,EventHubClient時(shí)如何重建的連接呢? 重建連接耗時(shí)多長(zhǎng)呢巧婶?
問題分析
以上問題,都可以通過調(diào)試EventHubClient的代碼日志來分析涂乌。
實(shí)驗(yàn)步驟:
準(zhǔn)備條件:參考文檔艺栈,構(gòu)建EventHub的發(fā)送消息代碼:
【舊版】使用 Java 向/從 Azure 事件中心 (azure-eventhubs) 發(fā)送/接收事件:https://docs.azure.cn/zh-cn/event-hubs/event-hubs-java-get-started-send-legacy
【新版】使用 Java 向/從 Azure 事件中心 (azure-messaging-eventhubs) 發(fā)送/接收事件:https://docs.azure.cn/zh-cn/event-hubs/event-hubs-java-get-started-send
1) 在初始化EventHubClient對(duì)象時(shí),使用默認(rèn)的OperationTimout時(shí)間(60秒)
2) 在發(fā)送第一條消息前湾盒,使線程睡眠65秒湿右。驗(yàn)證EventHubClient對(duì)象超時(shí)后SDK的輸出
3) 記錄觸發(fā)發(fā)送第一條消息前的時(shí)間,獲取EventHubClient建立連接的日志罚勾。計(jì)算耗時(shí)時(shí)間
4)?根據(jù)測(cè)試中輸出的日志毅人,得出5點(diǎn)結(jié)論
1:在2021-03-23 15:17:37.505時(shí)候,Connection連接建立成功尖殃,由于線程睡眠堰塌,所以在2021-03-23 15:18:37.463? (60秒后)Connection關(guān)閉,理由是(?errorDescription[The connection was inactive for more than the allowed 60000 milliseconds?and is closed by container 'LinkTracker')
2:當(dāng)線程睡眠結(jié)束分衫,在2021-03-23T15:18:42.559930300開始發(fā)送消息
3:EventHubClient馬上開始重新創(chuàng)建 Connection, Session般此,Link蚪战。耗時(shí)近2秒(從2021-03-23 15:18:42.578到2021-03-23 15:18:44.592)
4:重建連接后第一條消息發(fā)送成功在2021-03-23T15:18:44.829493900
5:第二條,第N條發(fā)送的時(shí)間就非常的短暫铐懊,在300毫秒左右邀桑。
總結(jié):EventHub Client在創(chuàng)建過程中的三個(gè)關(guān)鍵因素和日志中所打印出的事件順序
EventHub Client使用AMQP協(xié)議的連接創(chuàng)建與關(guān)閉的過程: ?它涉及到三個(gè)主要的部分:connection,session和link
三者關(guān)系圖
創(chuàng)建連接全過程事件順序
關(guān)閉連接全過程事件順序
代碼文件(pom.xml &?SendehmsgApplication.java)和日志可以參考博客園文章:https://www.cnblogs.com/lulight/p/14571236.html
參考資料
Azure 服務(wù)總線和事件中心內(nèi)的 AMQP 1.0 協(xié)議指南:https://docs.azure.cn/zh-cn/service-bus-messaging/service-bus-amqp-protocol-guide?toc=https%3A%2F%2Fdocs.azure.cn%2Fzh-cn%2Fevent-hubs%2Ftoc.json&bc=https%3A%2F%2Fdocs.azure.cn%2Fzh-cn%2Fbread%2Ftoc.json#what-is-amqp