您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么跨微服務共享DTO”,在日常操作中,相信很多人在怎么跨微服務共享DTO問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么跨微服務共享DTO”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
近年來,微服務變得非常流行。微服務的基本特征之一是它們是模塊化的、獨立的、易于伸縮的。微服務需要一起工作并交換數據。為了實現這一點,我們創建一個稱為dto的共享數據傳輸對象。
表示應用程序域的模型使用微服務進行管理。領域模型是不同的關注點,我們將它們與DAO層中的數據模型分離開來。
這樣做的主要原因是,我們不想通過服務向客戶端公開領域的復雜性。相反,我們通過REST api在服務于應用程序客戶機的服務之間公開dto。當dto在這些服務之間傳遞時,我們將它們轉換為域對象。
上面的面向服務的體系結構示意圖地顯示了從DTO到域對象的組件和流程。
以客戶訂購產品的過程為例。這個過程基于客戶訂單模型。讓我們從服務架構的角度來看這個過程。
假設客戶服務向訂單服務發送請求數據為:
"order": {
"customerId": 1,
"itemId": "A152"
}
客戶和訂單服務使用契約相互通信。契約(另一種服務請求)以JSON格式顯示。作為一個Java模型,OrderDTO類表示客戶服務和訂單服務之間的契約:
public class OrderDTO {
private int customerId;
private String itemId;
// constructor, getters, setters
}
微服務需要來自其他服務的特定信息來處理任何請求。假設有第三個微服務接收訂單支付請求。與訂購服務不同,這項服務需要不同的客戶信息:
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”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。