91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么跨微服務共享DTO

發布時間:2021-12-18 14:23:58 來源:億速云 閱讀:227 作者:iii 欄目:大數據

這篇文章主要介紹“怎么跨微服務共享DTO”,在日常操作中,相信很多人在怎么跨微服務共享DTO問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么跨微服務共享DTO”的疑惑有所幫助!接下來,請跟著小編一起來學習吧! 

1. 概述

近年來,微服務變得非常流行。微服務的基本特征之一是它們是模塊化的、獨立的、易于伸縮的。微服務需要一起工作并交換數據。為了實現這一點,我們創建一個稱為dto的共享數據傳輸對象。 

2. 將域對象暴露為DTO

表示應用程序域的模型使用微服務進行管理。領域模型是不同的關注點,我們將它們與DAO層中的數據模型分離開來。

這樣做的主要原因是,我們不想通過服務向客戶端公開領域的復雜性。相反,我們通過REST api在服務于應用程序客戶機的服務之間公開dto。當dto在這些服務之間傳遞時,我們將它們轉換為域對象。

怎么跨微服務共享DTO

上面的面向服務的體系結構示意圖地顯示了從DTO到域對象的組件和流程。 

3.微服務之間的DTO共享

以客戶訂購產品的過程為例。這個過程基于客戶訂單模型。讓我們從服務架構的角度來看這個過程。

假設客戶服務向訂單服務發送請求數據為:

"order": {
   "customerId": 1,
   "itemId": "A152"
}
 

客戶和訂單服務使用契約相互通信。契約(另一種服務請求)以JSON格式顯示。作為一個Java模型,OrderDTO類表示客戶服務和訂單服務之間的契約:

public class OrderDTO {
   private int customerId;
   private String itemId;

   // constructor, getters, setters
}
   

3.1. 使用客戶端模塊(庫)共享DTO

微服務需要來自其他服務的特定信息來處理任何請求。假設有第三個微服務接收訂單支付請求。與訂購服務不同,這項服務需要不同的客戶信息:

public class CustomerDTO {
   private String firstName;
   private String lastName;
   private String cardNumber;

   // constructor, getters, setters
}
 

如果我們還添加了送貨服務,客戶信息將有:

public class CustomerDTO {
   private String firstName;
   private String lastName;
   private String homeAddress;
   private String contactNumber;

   // constructor, getters, setters
}
 

因此,將CustomerDTO類放在共享模塊中不再滿足預期的目的。為了解決這個問題,我們采用一種不同的方法。

在每個微服務模塊中,讓我們創建一個客戶端模塊(庫),在它旁邊創建一個服務器模塊:

order-service
|__ order-client
|__ order-server
 

訂單客戶端模塊包含一個與客戶服務共享的DTO。因此,訂單客戶端模塊的結構如下:

order-service
└──order-client
    OrderClient.java
    OrderClientImpl.java
    OrderDTO.java
 

OrderClient是一個定義處理訂單請求的訂單方法的接口:

public interface OrderClient {
   OrderResponse order(OrderDTO orderDTO);
}
 

為了實現order方法,我們使用RestTemplate對象向order服務發送一個POST請求:

String serviceUrl = "http://localhost:8002/order-service";
OrderResponse orderResponse = restTemplate.postForObject(serviceUrl + "/create",
 request, OrderResponse.class);
 

此外,訂單客戶端模塊已經可以使用了。現在它變成了客戶服務模塊的依賴庫:

[INFO] --- maven-dependency-plugin:3.1.2:list (default-cli) @ customer-service ---
[INFO] The following files have been resolved:
[INFO]    com.baeldung.orderservice:order-client:jar:1.0-SNAPSHOT:compile
 

當然,如果沒有order-server模塊向訂單客戶端公開“/create”服務端點,這就沒有任何意義:

@PostMapping("/create")
public OrderResponse createOrder(@RequestBody OrderDTO request)
 

由于有了這個服務端點,客戶服務可以通過其訂單客戶端發送訂單請求。通過使用客戶端模塊,微服務以一種更隔離的方式彼此通信。DTO中的屬性在客戶機模塊中更新。因此,合同的破壞僅限于使用相同客戶端模塊的服務。    

到此,關于“怎么跨微服務共享DTO”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

津市市| 临沭县| 门头沟区| 安义县| 榆林市| 阳朔县| 黄梅县| 锦州市| 普兰县| 五指山市| 怀集县| 珲春市| 娱乐| 罗田县| 中西区| 安福县| 育儿| 铁力市| 鄂州市| 色达县| 永德县| 科尔| 太谷县| 公安县| 潢川县| 梁平县| 凤冈县| 简阳市| 炎陵县| 当阳市| 东兰县| 渑池县| 宣化县| 满洲里市| 丰镇市| 石屏县| 漳州市| 突泉县| 施秉县| 鄱阳县| 泸水县|