參與翻譯 (5人) : 子影, 硅谷課堂, ZICK_ZEON, Tocy, 雪落無痕xdj
微服務是大多數新型現代軟件解決方案中的首選架構。它們(大多數)被設計成去做一件事,它們必須相互協作去完成業務用例。微服務之間的所有通信都是通過網絡呼叫進行的;這種模式避免了服務之間的緊耦合而且提供了更好的模塊分離。
這裡基本上有兩種通信方式:同步和異步。正確應用這兩個方式是請求-回覆和事件驅動模式的基礎。在請求-回覆模式中,客戶端初始化一個請求,並且通常同步等待回覆。然而,有些情況下,客戶端可以不等待並向另一方註冊回調,這是異步方式的請求-回覆模式的一個例子。
本文中,我會通過基於高級消息隊列協議(AMQP)的兩個微服務之間的通信來展示異步方式的請求-回覆過程。AMQP是應用程序或組織之間傳遞業務消息的開放標準。雖然本文的重點在於介紹請求-回覆模式,但是同樣的代碼也可用於開發其它情況,比如事件風暴。使用異步模型通信對於實現聚合模式是非常有益的。
我會使用Apache QPid Proton(或Red Hat AMQ Interconnect)作為消息路由器和使用Vert.x AMQP橋接器,用於兩種服務之間的通信。
解決方案組件
演示有三個部分:
1.前端:這是一個用Java編寫的服務,此服務提供了一個HTTP端點來接收來自客戶端的調用。收到請求後,前端服務將調用指令發送到QPid路由器並註冊應答處理程序。當響應可用時,Vert.x AMQP橋將調用回覆處理程序。代碼庫中的前端文件夾託管此項目。
2.QPid路由器:前端進程執行調用併發布一條消息給QPid隊列。Vert.x自動負責添加correlationId作為message屬性,以識別對原始請求的響應。
3.後端:後端組件偵聽來自QPid路由器的呼叫中的消息,處理它(例如,在數據庫中進行計算或持久化),並將響應發送回QPid路由器。然後,QPid路由器將通過響應通知前端組件。代碼庫中的後端文件夾託管此項目。
消息流
1.跨不同組件的消息的基本流程如下。可在此處找到此流程的完整詳細信息以及相關標頭。
2.前端服務將向QPid服務器發送消息並提供回覆處理程序。Vert.x自動填充請求 - 回覆通信所需的標頭。
3.接收後端服務應用程序,處理該消息並將回覆發送回QPid服務器。Vert.x填充請求 - 回覆通信所需的標頭。
QPid服務器將回復消息分派給前端服務的回覆處理程序。Vert.x網橋自動處理回覆處理程序的調用。
如何運行示例:快速開始
通過發出以下命令,您可以使用Docker Compose文件來運行本例的所有三個組件:
docker-compose up
如何運行示例: 困難的方式
本節概述如何單獨運行每個組件。你需要下面的軟件在你的筆記本電腦上運行它們。
- Docker (執行Apache Qpid路由器)
- Open JDK 8 (要編譯前端和後端服務組件)
- Maven 3.2 (兩個服務都使用Maven)
- Vegeta 作為HTPP客戶端(或者您可以使用您最喜歡的工具)
執行
- 使用下面的命令啟動本地的QPid路由器:
docker run -it -p 5672:5672 ceposta/qdr
- 編譯並執行前端服務:
cd frontend
mvn clean install
java -jar target/frontend-service-full.jar
- 編譯並執行後端服務:
cd backend
mvn clean install
java -jar target/backend-service-full.jar
測試
Vegeta是一種用於HTTP負載測試的開源工具,可用於將請求發佈到前端組件。
echo "GET http://localhost:8080/" | ./vegeta attack -duration=60s -rate=50 | tee results.bin | ./vegeta report
驗證消息數目及延時
QPid,作為服務之間通信的異步集線器,提供了超快骨幹。一旦完成應用程序測試之後,你可以使用其IMAGE ID登錄QPid路由的Docker容器,並運行qdstat以查看各種指標。
docker execqdstat -c
docker execqdstat -l
docker execqdstat -a
總結
Apache QPid為微服務之間的通信提供了一個超快的主幹通訊。由於 AMQP 是一種線級協議,在其他棧(如.net)中編寫的服務也可以使用相同的通信通道。Java 開發人員可以使用 Vert.x AMQP birdge 工具輕鬆實現基於 amqp 的異步服務間通信模式。
開源社區OSC「好文翻譯」欄目,旨在每天為用戶推薦並翻譯優質的外網文章。再也不用怕因為英語不過關,被擋在許多技術文章的門外。關注開源社區OSC,每日獲取翻譯好文推薦,點擊“瞭解更多”,閱讀原文章。
閱讀更多 開源社區OSC 的文章