C# 具有CQR处理依赖项的.NET微服务

C# 具有CQR处理依赖项的.NET微服务,c#,.net,nuget,microservices,C#,.net,Nuget,Microservices,您好,我想让您向那些已经在比TODO更大的规模上使用微服务的人寻求建议 让我解释一下关于建筑的基本思想。我想用CQR在微服务架构中创建系统。我想微服务A将处理大量命令和事件,但其他微服务也可以监听该事件。因此,总的来说,我必须在这两个微服务之间分离事件契约。要获得更好的概述,请参见简单图表: 我把所有的巴士材料、处理器和逻辑都留在这里,我希望这是显而易见的。我只想关注合同 一开始我的想法是将Microservice A的代码和该域的所有事件放在一个解决方案中,但事件将放在单独的库中,该库将作为

您好,我想让您向那些已经在比TODO更大的规模上使用微服务的人寻求建议

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

我把所有的巴士材料、处理器和逻辑都留在这里,我希望这是显而易见的。我只想关注合同

一开始我的想法是将Microservice A的代码和该域的所有事件放在一个解决方案中,但事件将放在单独的库中,该库将作为nuget公开。然后这个nuget将被Microservice B使用,它将基于契约实现自己的处理程序

微服务解决方案:

  • 微服务代码(具有业务逻辑等的命令和处理程序)
  • DomainContract(可在多个服务之间共享但 已连接到当前解决方案域)
MicroserviceCode对拥有DomainContract和其他DomainContract NUGET具有项目依赖性

但后来我意识到,当微服务越来越多的时候 依赖项将出现,它可能会启动nuget地狱,并由于错误的nuget包等导致依赖项问题

我还考虑将契约作为Json格式的RESTAPI共享,并消除nuget版本控制

我想讨论一下如何避免微服务之间的地狱依赖的技巧


或者您使用的是我描述的方法,并且没有我想象的那么糟糕:)

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

我喜欢拥有nuget软件包和存储库/服务的想法,但是imagen如果你决定更改合同,你必须事先知道哪些服务使用该合同,签出代码并更新nuget软件包,签入代码,你需要对所有使用该更改合同的微服务重复

我已经在生产中看到了这两种解决方案,但我认为第一种解决方案更加防弹,因为您不需要考虑在任何环境中运行的任何服务是否具有旧的数据契约

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

这是一个很好的问题,但不幸的是,对于StackOverflow来说,这个问题太广泛了。您知道我可以在哪个网站上讨论此类内容吗?