[英]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.