Mut*_*r K -1 c# asp.net-core-mvc microservices asp.net-core 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在此消息的有效负载中使用 an 将它们绑定在一起)Invoicing Service订阅并查看所需的数据,从而可以填充发票的其余部分这似乎需要大量额外的工作和复杂性,事实确实如此。这是成功的微服务架构的“难”部分。这需要更多的纪律和预先规划,但在这个简单的例子中,最终的解决方案与您提出的分布式整体解决方案相比具有以下优势:
Invoicing Service或Customers Service,而无需触及其他服务中的代码因此,如果在您的情况下,这些好处值得您进行权衡,那就去吧。但是,每当您看到两个“微服务”直接通信时,您可能已经忽略了一些耦合,并且需要重新检查信息如何在系统中流动。
| 归档时间: |
|
| 查看次数: |
11843 次 |
| 最近记录: |