Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在使用docker进行容器化的asp.net核心中的项目之间共享类定义_Asp.net_Docker_Asp.net Core_Docker Compose_Masstransit - Fatal编程技术网

如何在使用docker进行容器化的asp.net核心中的项目之间共享类定义

如何在使用docker进行容器化的asp.net核心中的项目之间共享类定义,asp.net,docker,asp.net-core,docker-compose,masstransit,Asp.net,Docker,Asp.net Core,Docker Compose,Masstransit,因此,我有一个具有几个不同的“后端”asp.net核心web api的体系结构。我正在使用Masstransit和rabbitmq来促进容器间的通信。对于MassTransit,服务之间需要某种契约(只是简单的类),如果系统部署在本地或服务器上就可以了,但是对于docker容器,这已经证明是一个问题 我曾多次尝试谷歌搜索,但似乎很少有asp.net核心,尤其是masstransit,再加上docker文档 所以问题是: 如何分离使用asp.net core编写的容器,共享消息传递契约(即模型类)

因此,我有一个具有几个不同的“后端”asp.net核心web api的体系结构。我正在使用Masstransit和rabbitmq来促进容器间的通信。对于MassTransit,服务之间需要某种契约(只是简单的类),如果系统部署在本地或服务器上就可以了,但是对于docker容器,这已经证明是一个问题

我曾多次尝试谷歌搜索,但似乎很少有asp.net核心,尤其是masstransit,再加上docker文档

所以问题是:

如何分离使用asp.net core编写的容器,共享消息传递契约(即模型类)

我考虑过创建一个金块包。这是可行的,但似乎一个相当不雅观的解决方案+合同将是公开的(没什么大不了的,但可能还是不太好)


最后,我使用docker compose协调服务—如果这与您的答案相关。

如果项目位于单独的GitHub存储库中,并且您需要共享合同,那么您有一些选择

  • 创建一个单独的存储库,将其作为NuGet包发布。您可以使用GitHub包存储库私下执行此操作,以便您的合同不在公共NuGet站点上。这为您提供了一个单一的位置,但却成为了消息契约的单一争用点。好:这很容易,合同不应该改变,新版本的设计应该向后兼容,因为不是所有的服务都会升级到最新版本

  • 将类(虽然我个人更喜欢接口,但那是另一回事)复制到项目中——确切地说,包括名称空间。一些强迫症患者对此感到非常震惊,但老实说,我们在JSON和HTTP上有什么不同吗?如果合同管理良好,业主在确保其一致性和兼容性方面表现出控制力,那么这是可行的。我亲眼目睹了这一切。但是,我将重复名称空间非常匹配,而不仅仅是类/接口名


  • 这是我使用过的两种方法,都取得了巨大的成功。我听说一些团队使用单个存储库,每个服务都有文件夹。有意义的是,现代CI/CD可以跟踪路径更改,并且只构建/部署修改后的服务。因此,我想这是第三种选择,而不是为紧密耦合的服务创建大量存储库。

    如果项目位于单独的GitHub存储库中,并且您需要共享合同,那么您有几个选择

  • 创建一个单独的存储库,将其作为NuGet包发布。您可以使用GitHub包存储库私下执行此操作,以便您的合同不在公共NuGet站点上。这为您提供了一个单一的位置,但却成为了消息契约的单一争用点。好:这很容易,合同不应该改变,新版本的设计应该向后兼容,因为不是所有的服务都会升级到最新版本

  • 将类(虽然我个人更喜欢接口,但那是另一回事)复制到项目中——确切地说,包括名称空间。一些强迫症患者对此感到非常震惊,但老实说,我们在JSON和HTTP上有什么不同吗?如果合同管理良好,业主在确保其一致性和兼容性方面表现出控制力,那么这是可行的。我亲眼目睹了这一切。但是,我将重复名称空间非常匹配,而不仅仅是类/接口名


  • 这是我使用过的两种方法,都取得了巨大的成功。我听说一些团队使用单个存储库,每个服务都有文件夹。有意义的是,现代CI/CD可以跟踪路径更改,并且只构建/部署修改后的服务。因此,我想这是第三种选择,而不是为紧密耦合的服务创建大量存储库。

    谢谢。我是这样想的,但我没有这方面的经验,所以不知道这样做是否合适。我会照你的建议做的。谢谢。我是这样想的,但我没有这方面的经验,所以不知道这样做是否合适。我会照你的建议去做。