首页 > 解决方案 > 将事件指定为文件以存在于核心项目而不是服务项目上

问题描述

在我的解决方案中,我有 3 个项目

MyProject.Core
MyProject.Services.DataImporter
Myproject.Services.Cars

DataImporter和项目都Cars引用MyProject.Core项目。我有一个DataImportFinishedEventDataImporter服务发出的事件 ( )。 Services.Cars订阅了此事件,以后可能还会订阅更多服务。使用我目前的方法,我将此事件 ( DataImportFinishedEvent) 作为在两个服务上创建的文件。

由于这两个服务都引用核心项目,我应该将此事件移动到核心项目吗?这样做只会将文件放在一个位置。这是一个好的微服务实践吗?

标签: c#.netmicroservices

解决方案


一般来说,在微服务中拥有公共项目或库并不是一个好的做法,因为这样你就耦合了这两个服务的开发和部署,所以当你在公共项目中进行更改时,你必须更改和部署另外两个微服务。

在事件的情况下,最好的方法是在两个服务中都有不同的事件。这不一定意味着它们必须被复制。在生产者端,您必须有一个事件,其中包含任何潜在消费者所需的所有信息,而在消费者端,您必须有一个事件,其中包含该服务所需的信息,可能更少。

这样,您将两个服务解耦,如果明天消费者服务需要生产者提供的其他信息,您只需更改消费者端,反之亦然

一种思考方式是,当您使用不受您控制的第三方 api 时,您使用所需 api 提供的数据构建自己的响应对象,并且该对象与 api 使用的对象不同。


推荐阅读