[英]Communication between two ASP.NET Core projects in the same solution
[英]Communication Between two microservices using ASP.Net Core WebApi
我有兩個微服務。 客戶第一服務和發票服務第二服務。
在 Invoice MicroService 中,我將只保存 CustomerId。 使用此 CustomerId,我想檢索客戶微服務的所有相關數據。 但我不知道異步通信。
任何人請給我一些想法。
您提出的建議 - 特別是一個服務直接 HTTP 調用另一個服務 - 被稱為服務之間的緊密耦合,並且是微服務中的反模式。 它本質上將您的應用程序變成了一個分布式單體——應該避免它。
關於如何以良好、干凈的松耦合邊界正確地異步執行此操作的一個示例(有很多選項)如下所示:
Customers Service
會生成customer_created
事件Invoicing Service
訂閱這些事件,並在收到時進行必要的內部customer_id
更新(這是保持其本地數據存儲更新 - 最終一致性)Invoicing Service
創建需要來自Customers Service
的信息的發票時,它會生成一個cust_invoice_pending
事件Customers Service
訂閱了此事件,當它看到一個事件時,它會在總線上生成一條新消息,例如invoice_customer_detail_push
(注意,我會在此消息的有效負載中使用invoice_id
將它們綁定在一起)Invoicing Service
訂閱並查看它需要的數據,從而可以填充發票的 rest這可能看起來像很多額外的工作和復雜性,確實如此。 這是成功的微服務架構的“硬”部分。 這需要更多的紀律和預先計划,但在這個簡單的案例中,與您提出的分布式單體相比,這里是結果解決方案的優勢:
Invoicing Service
或Customers Service
,而無需觸及其他服務中的代碼所以,如果在你的情況下這些好處值得權衡,那就去做吧。 但是,每當您看到兩個“微服務”直接通信時,您可能已經忽略了一點耦合,需要重新檢查信息如何在您的系統中流動。
我認為您只需使用CustomerId
作為查詢參數(或帖子正文,但可能不是)向您的第二個服務發送 http 請求。
在執行CreateClient
請求之前,您需要在您的應用程序中創建客戶端。
使用 ASP.NET 核心中的 IHttpClientFactory 發出 HTTP 請求
var request = new HttpRequestMessage(HttpMethod.Get,
"domain_second_service/controller/method?customerId=X");
request.Headers.Add("Accept", "application/json");
request.Headers.Add("User-Agent", "HttpClientFactory-Sample");
var client = _clientFactory.CreateClient();
var response = await client.SendAsync(request);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.