- Java游戲服務器架構實戰
- 王廣帥編著
- 921字
- 2025-03-19 16:19:12
1.3.3 服務消息交互——消息中間件
消息中間件是一類成熟的網絡通信組件,它很好地屏蔽了網絡的底層通信細節,比如網絡連接建立、消息編碼解碼、消息發布與監聽等。它具有高性能、低耦合、發布/訂閱、異步性、流量控制、最終一致性等一系列功能,既支持單點部署,又支持集群部署。也有一些RPC,以它為通信基礎,實現業務服務之間異步調用,使用起來非常方便。
目前市場上有很多消息中間件產品,比如ActiveMQ、Kafka、RabbitMQ、RocketMQ,它們都能提供消息中間件的基本服務,特別是在分布式服務器架構中,它們扮演著重要的角色。但是在項目中應該使用哪一個呢?可以依據以下幾點。
●消息中間件的使用場景。
●能不能滿足當前需求,比如性能、穩定性、多客戶端支持等。
●在目前系統中,哪個使用起來更加方便。
基于以上原則,本書選擇了Kafka,因為目前Spring Cloud Bus可以直接整合Kafka,使用起來更加方便,而且Kafka通信延遲相對比較低,且支持高并發。
內部服務之間,消息中間件就是一個消息中樞,負責所有交互消息的傳輸。利用消息中間件的低耦合和訂閱發布性,一個服務想要給另一個服務發消息,就不需要知道對方的任何信息,不需要和對方建立連接,只需要把消息發布出去,誰對消息有興趣誰就去訂閱,這樣大大降低了內部服務之間網絡通信的復雜性。
如圖1.2所示,網關和業務服務之間的通信就是這種模式。網關接收到客戶端的請求之后,只需要根據某些規則,將消息發布出去,負責處理這些消息的服務會主動監聽這些消息的發布情況。這樣網關和業務服務只需要和消息中間件通信就可以了,而網關與業務服務之間是沒有關聯的。就算這個時候沒有啟動業務服務,消息也不會丟失,且被緩存在消息中間件之中。等業務服務啟動之后,可以繼續處理消息。
利用消息中間件的最終一致性,可以把一些該服務不需要及時處理的消息先發送到消息中間件的消息隊列中,保證消息不會丟失,然后由另一個服務再處理這些消息。比如數據庫更新的時候會有網絡I/O,在等待數據庫操作返回的時候,會卡住當前線程,導致當前線程被掛起而不能處理后面的消息。這時就可以把更新數據庫操作封裝為事件,先異步發送到消息中間件的消息隊列中,由另外一個服務不停地從消息隊列中取出事件,然后更新數據庫。這樣就能增加業務消息的吞吐量,提高TPS處理速度,實現數據的異步更新。
- ASP.NET Core:Cloud-ready,Enterprise Web Application Development
- Spring Cloud Alibaba核心技術與實戰案例
- Learning Real-time Processing with Spark Streaming
- 機器學習系統:設計和實現
- WebAssembly實戰
- Access 數據庫應用教程
- Xcode 7 Essentials(Second Edition)
- 物聯網系統開發:從0到1構建IoT平臺(第2版)
- 琢石成器:Windows環境下32位匯編語言程序設計
- C語言程序設計
- Creating Stunning Dashboards with QlikView
- Illustrator CC平面設計實戰從入門到精通(視頻自學全彩版)
- Android應用開發實戰
- JavaScript+jQuery網頁特效設計任務驅動教程
- Learn C Programming