AWS Ecs中微服务之间的通信

时间:2018-07-18 18:31:45

标签: amazon-web-services docker amazon-ecs netflix-eureka

我在微服务之间的通信上遇到麻烦。我有许多春季启动应用程序,并且它们之间有许多请求HTTP和AMQP(RabbitMQ)。在本地(开发人员中),我使用没有Docker映像的Eureka(Netflix Oss)。

问题是:在Amazon ECS基础架构中,我如何使用相同的行为?使用Docker进行微服务之间通信的常见惯例是什么?我仍然可以使用Eureka进行服务发现吗?除此之外,这种通信将如何在容器实例之间进行?

2 个答案:

答案 0 :(得分:0)

我建议阅读ECS Service Load Balancing,尤其要注意两点:

  1. 您的ECS服务配置可能表明您让ECS或EC2实例从本质上选择服务在外部运行的端口号。 (即,对于Docker容器内的Spring Boot应用程序,您的应用程序认为它正在端口8080上运行,但实际上,对于Docker容器外的任何内容,它可能都在端口1234上运行 2个ECS群集将检查您在负载均衡器中定义的运行状况终结点,并终止/重生已死亡的服务实例
  2. 负载均衡器为您提供了不同的方法来指定您要与之通信的集群中的哪个应用程序。这可以基于路由或基于DNS名称(可能还有其他一些)。因此,http://myservice.example.com/api所指向的ECS服务可能不同于http://myservice.exaple.com/app ...或http://app.myservice.example.comhttp://api.myservice.example.com

您可以在没有负载均衡器的情况下配置ECS,但我不确定在这种情况下它的工作情况如何。

现在,您正在谈论服务发现。您仍然可以使用Eureka进行服务发现,让Spring Boot来解决这一问题。您可能需要对如何告诉Eureka服务的位置很聪明(因为Docker容器内的主机名可能是无用的,并且容器内的端口号也将完全无效。)您可能需要在此处做些巧妙的事情才能正确派生该数字,例如使用AWS API自省。我认为this SO answer正确地描述了它,或者至少足够接近才能开始使用。

现在显然是ECS has service discovery built in。这是自上次使用ECS以来的新功能,还是因为我们有其他解决方案而没有使用它。如果您由于其他原因没有完全与尤里卡(Eureka)保持联系。

答案 1 :(得分:0)

感谢您的回复。现在我正在使用Eureka,因为我也在使用Feign进行微服务之间的通信。

我的情况是这样的:我有微服务(示例A,B,C)。 A通过Feign(休息)与B和C进行通信。 Microservices Example

微服务A上的代码示例:

@FeignClient("b-service")
public interface BFeign {
}

@FeignClient("c-service")
public interface CFeign {
}

使用ECS和ALB仍可以使用Feign吗?如果可以,您如何建议我这样做?