.Net 核心微服务查询来自许多服务

Posted

技术标签:

【中文标题】.Net 核心微服务查询来自许多服务【英文标题】:.Net core microservices query from many services 【发布时间】:2021-10-08 21:43:53 【问题描述】:

我有一个 .net core 5 微服务项目,客户端有一个搜索模块,它将从许多对象中查询数据,这些对象在许多服务中。

第一个产品微服务。 在这个微服务中有表产品 productid, productname 。

供应商的第二个微服务。 在这个微服务中有表帐户 verndorId, vendorName。

购买的第三个微服务 在这个微服务中有表 purchase title, productid(这个 id 来自第一个微服务中的产品表), accountid (这个 id 来自 secount 微服务中的帐户表)。

现在:用户想要搜索产品名称如“衣服”和供应商名称如“x”的购买;

谁可以做这个查询抛出微服务模式。

【问题讨论】:

【参考方案1】:

采用单体系统并在每张表上添加服务接口只会让您的生活陷入困境,因为您将开始自己实现该数据库逻辑 - 就像在这个问题中您尝试重新创建数据库连接一样。

暂且不说,对于这种情况,您对服务的分区听起来并不正确(或不需要)。考虑到购买描述了发生的事件(即使它们后来被删除),他们可以捕获产品或供应商的状态。因此,您可以扩充购买中的数据,以表示购买时正确的产品和供应商数据。这会将购买查询与购买服务隔离开来,并具有在产品/供应商随时间演变时保留历史记录的额外好处。

【讨论】:

感谢您的回答,就我而言,它只是不购买模块,我现在正在开发完整的财务系统,据我所知,微服务模式不适合这些类型的系统,对吧? 不一定——但简单的闯入服务将无法正常工作。在许多微服务中,即使您对服务进行分区以最小化跨服务依赖关系,您仍然需要集中报告 - 我通常通过构建一个从所有服务获取数据的数据集市来做到这一点,请参阅freecontent.manning.com/wp-content/uploads/…【参考方案2】:

考虑到这种情况,您必须在消息队列服务集成中为购买、供应商和产品构建至少 3 个队列管理器。 并设置请求和回复队列。

现在这些数据的请求和回复可以是 JSON 或 XML,但你喜欢。

您需要创建一个侦听器来负责侦听回复队列,并且您可以创建类似 SignalR 流的东西来持续侦听。

一旦所有的整合完成,您就可以直接将结果注入您的客户端应用程序中。

【讨论】:

以上是关于.Net 核心微服务查询来自许多服务的主要内容,如果未能解决你的问题,请参考以下文章

微服务实践:微服务的事件驱动数据管理

微服务实践:从单体式架构迁移到微服务架构

.NET Core 微服务使用 RabbitMQ [关闭]

跨微服务查询/分页

3.16 Go微服务实战(微服务理论) --- Go语言基于ES-CQRS的微服务实践

3.16 Go微服务实战(微服务理论) --- Go语言基于ES-CQRS的微服务实践