背景
我的环境——Java、Play2、MySql
我在 Play2 ->/S1,/S2,/S3 上编写了 3 个无状态 Restful 微服务
S1 消费来自 S2 和 S3 的数据。因此,当用户点击/S1 时,该服务异步调用/S2、/S3,合并数据并返回最终的 json 输出。旁注 - 这些服务最终将作为 docker 镜像发布。
为了在开发环境中进行测试,我分别在端口 9000、9001 和 9002 上运行/s1、/s2、/s3。我从配置文件等中获取端口号。我点击了服务,一切正常。但是有更好的方法可以在我的开发者盒子上设置测试环境吗?示例 - 如果我想运行 20 个服务等等。
话虽如此,在生产环境中,它们将被称为 mydomain.com/s1、mydomain.com/s2、mydomain.com/s3 等。我想在我的开发环境框中完成此操作....我猜猜我会想象涉及一些反向代理。
问题
所以问题是,如何在不指定或不使用开发人员环境中的端口号的情况下从 S1 中调用/S2 和/S3。人们如何在本地机器上测试微服务?
额外奖励
知道我将把我的服务作为 docker 镜像发送,我如何使用 docker 容器(每个容器运行一项服务)完成同样的事情
最佳答案
最简单的方法 (IMO) 是将您的开发环境设置为尽可能接近您的生产环境。如果您希望您的生产应用程序与 20 个微服务一起工作,每个微服务都在一个单独的容器中运行,那么请在您的开发机器上执行此操作。这样,当您部署到生产环境时,您不必从使用端口更改为使用主机名。
在一堆不同的容器中设置大量微服务的最简单方法可能是使用 Fig或与 Docker 即将推出的 integrated orchestration tools .由于我们没有关于即将发生的事情的所有细节,我将使用图。这是用于生产服务器的 fig.yml
文件:
application:
image: application-image
links:
- service1:service1
- service2:service2
- service3:service3
...
service1:
image: service1-image
...
service2:
image: service2-image
...
service3:
image: service3-image
...
这个缩写的 fig.yml
文件将在应用程序和所有服务之间建立链接,以便在您的代码中,您可以通过主机名 service1
引用它们,service2
等
为了开发目的,这里还有很多东西需要加入:对于每个服务,您可能想要挂载一个目录来编辑代码,您可能想要公开一些端口以便测试服务直接等等。但其核心是,开发环境与生产环境相同。
听起来确实很多,但是像 Fig 这样的工具可以让配置和运行您的应用程序变得非常容易。如果你不想使用 Fig,那么你可以用 Docker 命令做同样的事情——关键是容器之间的链接。我可能会创建一个脚本来为生产和开发环境进行设置。
关于java - 开发者环境——如何调用/消费其他微服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27408510/