官术网_书友最值得收藏!

1.3.3 服務消息交互——消息中間件

消息中間件是一類成熟的網絡通信組件,它很好地屏蔽了網絡的底層通信細節,比如網絡連接建立、消息編碼解碼、消息發布與監聽等。它具有高性能、低耦合、發布/訂閱、異步性、流量控制、最終一致性等一系列功能,既支持單點部署,又支持集群部署。也有一些RPC,以它為通信基礎,實現業務服務之間異步調用,使用起來非常方便。

目前市場上有很多消息中間件產品,比如ActiveMQ、Kafka、RabbitMQ、RocketMQ,它們都能提供消息中間件的基本服務,特別是在分布式服務器架構中,它們扮演著重要的角色。但是在項目中應該使用哪一個呢?可以依據以下幾點。

●消息中間件的使用場景。

●能不能滿足當前需求,比如性能、穩定性、多客戶端支持等。

●在目前系統中,哪個使用起來更加方便。

基于以上原則,本書選擇了Kafka,因為目前Spring Cloud Bus可以直接整合Kafka,使用起來更加方便,而且Kafka通信延遲相對比較低,且支持高并發。

內部服務之間,消息中間件就是一個消息中樞,負責所有交互消息的傳輸。利用消息中間件的低耦合和訂閱發布性,一個服務想要給另一個服務發消息,就不需要知道對方的任何信息,不需要和對方建立連接,只需要把消息發布出去,誰對消息有興趣誰就去訂閱,這樣大大降低了內部服務之間網絡通信的復雜性。

如圖1.2所示,網關和業務服務之間的通信就是這種模式。網關接收到客戶端的請求之后,只需要根據某些規則,將消息發布出去,負責處理這些消息的服務會主動監聽這些消息的發布情況。這樣網關和業務服務只需要和消息中間件通信就可以了,而網關與業務服務之間是沒有關聯的。就算這個時候沒有啟動業務服務,消息也不會丟失,且被緩存在消息中間件之中。等業務服務啟動之后,可以繼續處理消息。

利用消息中間件的最終一致性,可以把一些該服務不需要及時處理的消息先發送到消息中間件的消息隊列中,保證消息不會丟失,然后由另一個服務再處理這些消息。比如數據庫更新的時候會有網絡I/O,在等待數據庫操作返回的時候,會卡住當前線程,導致當前線程被掛起而不能處理后面的消息。這時就可以把更新數據庫操作封裝為事件,先異步發送到消息中間件的消息隊列中,由另外一個服務不停地從消息隊列中取出事件,然后更新數據庫。這樣就能增加業務消息的吞吐量,提高TPS處理速度,實現數據的異步更新。

主站蜘蛛池模板: 合肥市| 布尔津县| 陕西省| 同心县| 梅州市| 衡水市| 乐业县| 蛟河市| 罗定市| 铁岭市| 新田县| 洛南县| 湘乡市| 阿拉善盟| 东乌珠穆沁旗| 临澧县| 清水县| 黄石市| 沁阳市| 陆川县| 永泰县| 彭阳县| 宜都市| 南涧| 清丰县| 肇州县| 平原县| 鄱阳县| 宁城县| 新密市| 嘉鱼县| 凤冈县| 靖宇县| 保定市| 麟游县| 丹凤县| 鄄城县| 曲阳县| 晋宁县| 莱阳市| 清水县|