簡體   English   中英

Spring 具有可配置通信方式的啟動微服務

[英]Spring Boot Microservice With Configurable Communication Method

考慮這種情況:我有 N>2 個軟件組件(微服務),它們可以通過兩種不同的通信協議進行通信,具體取決於它們的部署方式。 換句話說,我有兩個部署場景:

  1. 這些組件將部署在同一台機器上。 在這種情況下,如果我考慮性能,我不知道使用 HTTP 來傳達這兩個組件是否有意義。 我了解使用java在同一台機器上通信兩個進程有更有效的方法,例如sockets、RMI、RPC...

  2. 這些組件將部署在 N 台不同的機器上。 在這種情況下,在我看來,使用 HTTP 來傳達這些組件對我來說是有意義的。

簡而言之,我想做的是能夠根據我執行部署的方式來配置通信協議:在單機上,例如使用RMI,但是當我在兩台機器上部署時,使用HTTP。

有誰知道我如何使用 Spring Boot 來做到這一點?

非常感謝!

RMI 或 HTTP 等協議的基本構建塊是套接字通信。 如果您不是在尋找 HTTP 或 RMI 的舒適性,並且優先考慮性能,那么純套接字通信是您的選擇。

這將引發其他問題,例如部署困難。 您應該提前知道兩個節點的 IP 地址。

另一種選擇是 go 用於unix 域套接字,用於服務器內部通信。 為此,您必須依賴JunixSocket

如果要 go 另一條路線,請檢查所有進程間通信選項。

編輯

正如您在評論中所說“這不再是兩個組件的問題,而是多個組件的問題”。 在這種情況下,每個組件都應該是一個微服務,並且應該能夠相互交互。 如果選擇最可擴展的協議是 REST/RPC,那么兩者都在底層使用 HTTP 協議。 REST 是使用 CRUD 操作針對數據源開發的 API 的理想解決方案。 RPC 更傾向於面向行動的 API。 您可以在此處找到更多詳細信息以識別 REST 和 RPC 之間的區別。

我的理解是……如果組件(生產者和消費者)部署在同一主機上,則使用優化的協議,如果在不同的主機上,則使用 HTTP(s) 首先,go 必須有一個嚴肅的驅動程序來解決這個問題路線。 我認為這里的驅動程序是性能。 您希望在本地部署上提供更快的性能,而在分布式部署上提供相對較低的速度。 順便說一句,鑒於我們處於分布式部署世界(或至少我們正在前進的地方)HTTP 將生存下來。 不鼓勵自定義協議。

無論如何...我會說您的生產者應用程序應該處於自我修復/發現模式。 在啟動時(或定期),它可以檢查“優化”端點的健康狀況並確定優化接收器是否在附近。 接收器需要站在負載平衡器后面。 如果接收器未啟動,則 go 指向 HTTP(S) 並在運行時相應地設置此實例。

對於消費者來說,它需要保持兩個門(HTTP 和優化)打開。 它應該准備好處理來自任一通道的請求。

在 SpringBoot 中,您可以實現 healthCheck 並根據優化端點的健康狀況打開/關閉發射器。 如果兩個端點都不健康,那么生產者肯定不會發出任何東西。 除此之外,rest 只是正常的依賴注入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM