我在微服务之间的通信上遇到麻烦。我有许多春季启动应用程序,并且它们之间有许多请求HTTP和AMQP(RabbitMQ)。在本地(开发人员中),我使用没有Docker映像的Eureka(Netflix Oss)。
问题是:在Amazon ECS基础架构中,我如何使用相同的行为?使用Docker进行微服务之间通信的常见惯例是什么?我仍然可以使用Eureka进行服务发现吗?除此之外,这种通信将如何在容器实例之间进行?
答案 0 :(得分:0)
我建议阅读ECS Service Load Balancing,尤其要注意两点:
http://myservice.example.com/api
所指向的ECS服务可能不同于http://myservice.exaple.com/app
...或http://app.myservice.example.com
与http://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吗?如果可以,您如何建议我这样做?