2017-12-02 366 views
0

REST Microservice如何與另一個混合的Microservice進行通信,這意味着他可以與REST和Message Queue進行通信。例如一個API網關。對於外部世界,他可以通過REST與應用程序,手機進行通信,但是來自後端的通信是通過消息隊列進行的。如何從REST通信到消息隊列

使用案例:

我的主頁想要從數據庫中獲得車輛。他通過GET-Request請求API網關。 API網關接受GET請求並將其發佈到消息隊列中。另一個Microservice接收消息併發布結果。然後,API網關消耗結果並將其作爲響應發回。

我該如何實現它?我是否在Apache Kafka上使用Spring引導?我需要實現異步通信嗎?

(對不起它的德國) enter image description here

+0

我想你應該等待你的休息控制器的異步響應/超時。 –

回答

1

有解決這種情況的一些方法。

您可以爲每個客戶端請求創建主題並等待另一端的回覆,例如DriverService會讀取請求消息,獲取所有數據並將其發佈到您的客戶端請求主題。一旦你消費了迴應消息,你就會銷燬該話題。

但是在請求 - 響應交互中,'臨時'主題可能需要很長時間才能刪除(如果沒有配置可以避免這種情況,例如delete.topic.enable屬性),並且您需要監視可能的主題過度生長。

Websocket是另一種可能的解決方案。您的客戶端將開始監聽之前與您的服務器達成一致的特定主題,然後在特定超時時間內等待響應,此時您的DriverService將發佈到該特定套接字通道。

Spring Boot爲您提供Kafka和Websockets的絕佳首發。如果您期待着大量的交易,我會採用混合策略,使用Kafka來幫助我的後端擴展並處理所有交易,然後通過Websocket響應客戶端。