我們有一個用例,我們有兩個微服務,Microservice A將一個長時間運行的任務推送到Microservice B.Microservice B開始處理任務并不斷更新任務的狀態?,F在Microservice A必須不斷輪詢Microservice B任務狀態的更新。我們當前的設置中沒有隊列。因此,我們想到了創建一個web socketbetween Microservice A,Microservice B以便微服務 B 可以將狀態更新推送到Microservice A. 這種設計是否會違反任何原則,Web sockets并且與持續輪詢相比,它是否會是一種更好的方法?
3 回答

萬千封印
TA貢獻1891條經驗 獲得超3個贊
最推薦的選項是添加一個隊列:
這將減少微服務 A 和微服務 B 之間的耦合
這將允許同樣對任務狀態/結果感興趣的微服務 C 了解它,而無需對微服務 B 進行任何更改
如果你仍然選擇 websocket,你將不得不考慮可擴展性的情況(如果你有兩個 MicroserviceB 實例,調用哪個實例),失敗(如果一個服務失敗,誰重新運行套接字......),和其他一些人。這就是為什么它不是在微服務環境中進行異步調用的最佳選擇。

DIEA
TA貢獻1820條經驗 獲得超2個贊
如果你想走這條路——我建議更好的方法是轉移焦點,這樣你就有一個中央 websockets“服務器”,你的微服務直接相互連接。然后,您實際上是在復制所有其他架構如何做到這一點,無論是 RabbitMQ 還是 Kafka 等

弒天下
TA貢獻1818條經驗 獲得超8個贊
Apache Pulsar 能夠作為消息代理工作,并具有用于向主題發送消息和偵聽主題的 WS 接口。我自己還沒有嘗試過……但我會測試使用它來發送和監聽不同類型的微服務中的事件。Pulsar 本身是可擴展的,允許持久消息傳遞,例如可以在 Kubernetes 上安裝和執行。但我只讀過它......現在我必須自己嘗試一下:)。
添加回答
舉報
0/150
提交
取消