亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

調用依賴微服務

調用依賴微服務

海綿寶寶撒 2021-12-10 16:33:30
假設我有 2 個微服務:Service1 和 Service2。他們每個人都有自己的數據庫。Service1 有 EntityA,Service2 有 EntityBEntityA {    Long id;    //other fields    EntityB entity;}EntityB{     //other fields}我正在使用 Spring 的 RestTemplate 來檢索和保存數據。問題是:當從 Service1 的數據庫中檢索 EntityA 時,我沒有 EntityB 的數據,因為它們保存在 Service2 的數據庫中,我知道我應該通過 RestTemplate 進行休息調用以從 Service2 的數據庫中檢索 EntityB,但是兩者之間的關系如何?實體 - EntityA 是否仍應在內部包含整個 EntityB 對象,即使其字段除 id 外大部分時間都為空?我錯過了什么?先感謝您。
查看完整描述

3 回答

?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

從技術角度來看,您的問題可以通過API Gateway 解決

簡而言之,您應該定義一個新的微服務,例如gateway service,將由您的 API 客戶端調用。該gateway service會又:

  1. 調用Service1Entity1idfor相處Entity2

  2. 調用Service2Entity2根據步驟 1 中的 id 獲取。

  3. 聚合兩個響應(在你的情況下,設置Entity2里面的值Entity1)。

  4. 將聚合響應返回給客戶端。

設計時要記住兩件事:

  • 您的 API 客戶端不應該知道他的數據是由兩個服務獲取的。

  • 在網關中聚合客戶端響應通常更清晰,因為它允許在您的微服務之間進行更高級別的解耦。例如,您可以按如下方式對實體進行建模(并刪除Service1和之間的數據模型依賴項Service2,允許兩個服務獨立發展)。

請參閱以下代碼段:

// In Service1

EntityA {

    Long bId; 

}


// In Service2

EntityB{


}


// In Gateway

Response {

    EntityA a;

    EntityB b;

}

天氣Entity1應參考的決定Entity2不取決于您的數據如何分發,而是取決于您的業務需求。如果您有一個單體應用程序,并且在這種情況下Entity1引用Entity2是有意義的,那么在微服務環境中這樣做仍然有意義。


查看完整回答
反對 回復 2021-12-10
?
www說

TA貢獻1775條經驗 獲得超8個贊

我遇到了這種模式,我認為它對您的情況很有用。
該模式稱為CQRS(Command Query Responsibility Segregation,一口)

該模式假設您有一個適當的事件溯源系統,自從您使用微服務以來,您已經有了很大的變化。

當任何EntityA服務1改變時,服務1發布一個事件。這同樣適用于服務2,當任何EntityB Si變更也將發布事件。

然后我們有服務3訂用來自的事件服務1服務2聚集在其本地數據庫中的數據并將其存儲?,F在,所有你需要做的就是呼叫服務3,從獲得agregated數據服務1服務2

當然,這種模式有其缺點,如最終一致性,但在某些情況下,它實際上可能是最合適的。

這個想法主要來自這里:https : //microservices.io/patterns/data/cqrs.html。我還會從這里至少閱讀“何時使用此模式”部分:https : //docs.microsoft.com/en-us/azure/architecture/patterns/cqrs


查看完整回答
反對 回復 2021-12-10
?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

我想到的兩個解決方案既簡單又復雜。

重復數據

在 MS 之間,通常有一個高度可用的發布-訂閱或消息隊列集群系統。當EntityB被保存在Service2你的事件發送到隊列或發布-訂閱系統。Service1可以訂閱該特定事件并將有關信息存儲EntityB在其自己的數據庫中。

組域邏輯

也許,域Service1和之間的相關性太大了Service2。在這種情況下,您可能希望將您的服務分組為單個服務。


查看完整回答
反對 回復 2021-12-10
  • 3 回答
  • 0 關注
  • 269 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號