我在微服务之间的通信方面遇到了麻烦。我有许多 Spring Boot 应用程序,它们之间有许多请求 HTTP 和 AMQP (RabbitMQ)。在本地(在开发中)我使用没有 Docker 图像的 Eureka(Netflix Oss)。
问题是:在 Amazon ECS 基础架构中,我如何使用相同的行为?使用 Docker 进行微服务之间通信的常见做法是什么?我仍然可以使用 Eureka 进行服务发现吗?除此之外,这种通信将如何在容器实例之间进行?
最佳答案
我建议阅读 ECS Service Load Balancing ,特别是两点:
2 个 ECS 集群将检查您在负载均衡器中定义的健康端点,并杀死/重生您的服务已死亡的实例
http://myservice.example.com/api
可能指向与 http://myservice.exaple.com/app
不同的 ECS 服务... 或 http://app.myservice.example.com
对比 http://api.myservice.example.com
. 您可以在没有负载均衡器的情况下配置 ECS,我不确定在这种情况下它的效果如何。
现在,您正在谈论服务发现。你仍然可以使用 Eureka 进行服务发现,让 Spring Boot 来处理。你可能需要聪明地告诉 Eureka 你的服务在哪里(因为 Docker 容器内的主机名可能没用,容器内的端口号也完全没用。)你可能需要在这里做一些聪明的事情才能正确导出该数字,例如使用 AWS API 进行内省(introspection)。我认为 this SO answer正确地描述它,或者至少足够接近开始。
另外显然 ECS has service discovery built in现在。这是自从我上次使用 ECS 以来的新功能,或者我们没有使用它,因为我们有其他解决方案。如果你因为其他原因没有完全依赖 Eureka。
关于amazon-web-services - Aws Ecs 中微服务之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51408800/