将事件指定为文件以存在于核心项目而不是服务项目上
specifying events as files to live on Core project instead of service project
在我的解决方案中,我有 3 个项目
MyProject.Core
MyProject.Services.DataImporter
Myproject.Services.Cars
DataImporter
和 Cars
项目都引用了 MyProject.Core
项目。
我有一个由 DataImporter
服务发出的事件 (DataImportFinishedEvent
)。
Services.Cars
已订阅此活动,稍后可能会订阅更多服务。
使用我目前的方法,我将此事件 (DataImportFinishedEvent
) 作为文件创建
在这两项服务上。
既然这两个服务都引用了 Core 项目,我应该将此事件移到 Core 项目吗?这样做只会将文件放在一个位置。
这是一个好的微服务实践吗?
一般来说,在微服务中拥有公共项目或库并不是一个好的做法,因为这样你就耦合了两种服务的开发和部署,所以当你在公共项目中进行更改时,你必须更改和部署其他两个微服务。
在事件的情况下,最好的方法是在两个服务中有不同的事件。这并不一定意味着它们必须被复制。在生产者方面,您必须有一个事件,其中包含任何潜在消费者所需的所有信息,而在消费者方面,您必须有一个事件,其中包含该服务所需的信息,可以更少。
通过这种方式,您可以解耦这两个服务,如果明天消费者服务需要生产者提供的其他信息,您只需更改消费者端,反之亦然
一种思考方式是,当您使用您无法控制的第三方 api 时,您可以使用您需要的 api 提供的数据构建自己的响应对象并且此对象与 api 使用的对象不同。
在我的解决方案中,我有 3 个项目
MyProject.Core
MyProject.Services.DataImporter
Myproject.Services.Cars
DataImporter
和 Cars
项目都引用了 MyProject.Core
项目。
我有一个由 DataImporter
服务发出的事件 (DataImportFinishedEvent
)。
Services.Cars
已订阅此活动,稍后可能会订阅更多服务。
使用我目前的方法,我将此事件 (DataImportFinishedEvent
) 作为文件创建
在这两项服务上。
既然这两个服务都引用了 Core 项目,我应该将此事件移到 Core 项目吗?这样做只会将文件放在一个位置。 这是一个好的微服务实践吗?
一般来说,在微服务中拥有公共项目或库并不是一个好的做法,因为这样你就耦合了两种服务的开发和部署,所以当你在公共项目中进行更改时,你必须更改和部署其他两个微服务。
在事件的情况下,最好的方法是在两个服务中有不同的事件。这并不一定意味着它们必须被复制。在生产者方面,您必须有一个事件,其中包含任何潜在消费者所需的所有信息,而在消费者方面,您必须有一个事件,其中包含该服务所需的信息,可以更少。
通过这种方式,您可以解耦这两个服务,如果明天消费者服务需要生产者提供的其他信息,您只需更改消费者端,反之亦然
一种思考方式是,当您使用您无法控制的第三方 api 时,您可以使用您需要的 api 提供的数据构建自己的响应对象并且此对象与 api 使用的对象不同。