具有CQRS处理依赖性的.NET微服务

时间:2018-06-19 11:52:54

标签: c# .net nuget microservices

您好,我想向已经与Microservices合作的人员(比TODO示例更大)征求意见。

让我解释一下有关建筑的基本思想。我想使用CQRS在微服务架构中创建系统。我想象微服务A将处理大量命令和事件,但其他微服务也可以监听该事件。因此,总的来说,我不得不在这两个微服务之间分开事件契约。要获得更好的概述,请参见简单图表:

Diagram

我将所有总线内容,处理程序和逻辑留在这里,我希望这很明显。我只想关注合同

我对Beginnig的想法是将Microservice A的代码与该域的所有事件放在一个解决方案中,但是事件将放置在单独的库中,并以nuget形式公开。然后,微服务B将消耗此nuget,微服务B将基于Contract实现自己的处理程序。

微服务A解决方案:

  • MicroserviceCode(具有业务逻辑的命令和处理程序等)
  • DomainContract(可以在许多服务之间共享的事件,但 已连接到当前解决方案域)

MicroserviceCode对自己的DomainContract和其他DomainContract nuget具有项目依赖性

但是后来我意识到微服务何时会越来越多 依赖关系会出现,它会启动nuget地狱,并由于错误的nuget包等导致依赖关系问题。

我还考虑过将合约作为Json格式的Rest API共享,并消除nuget版本控制。

我想讨论有关如何避免微服务之间的地狱依赖性的任何技巧。

或者也许您使用了我所描述的方法,而且还没有我想象的那么糟糕吗?:)

1 个答案:

答案 0 :(得分:0)

我建议您通过“项目参考” 共享数据合同和事件合同,并将您的所有项目整合到一个解决方案中,这样编译器会立即告诉您需要修复的地方如果您更改合同。 当然,此操作的缺点是,您每次都需要部署所有服务,因为很难在签入时知道哪个服务使用特定的合同。

我喜欢拥有nuget包和存储库/服务的想法,但是如果您决定更改合同,请想象一下,您必须提前了解哪些服务会使用该合同,并检查代码并更新nuget包并签入代码,您需要对所有使用已更改合同的微服务重复执行此操作。

我已经在生产中看到了这两种解决方案,但是我认为第一种解决方案更能证明您的需要,因为您无需考虑在任何环境中运行的任何服务是否都具有旧的数据合约。

抬头 您应该在合同中的服务之间共享的唯一内容。

相关问题