当前位置: 首页 > 知识库问答 >
问题:

Aws Ecs中微服务间的通信

申思远
2023-03-14

我在微服务之间的通信上遇到了麻烦。我有许多spring boot应用程序,它们之间有许多请求HTTP和AMQP(RabbitMQ)。在本地(在dev中),我使用没有Docker图像的Eureka(Netflix Oss)。

共有1个答案

阎善
2023-03-14

我建议阅读ECS服务负载平衡,特别是两点:

  1. 您的ECS服务配置可能会说,您让ECS或EC2实例从本质上选择服务在外部运行的端口号。(例如,对于Docker容器内的Spring Boot应用程序,您的应用程序认为它运行在端口8080,但实际上对于Docker容器外的任何东西,它可能运行在端口12342 ECS集群将检查您在负载均衡器中定义的健康endpoint,并杀死/重新清除已经死亡的服务实例
  2. 负载均衡器为您提供了不同的方法来指定正在与集群中的哪个应用程序进行对话。这可以是基于路由的或基于DNS名称的(也许还有其他一些)。因此,http://myservice.example.com/api可能指向与http://myservice.exaple.com/app不同的ECS服务...或http://app.myservice.example.comvshttp://api.myservice.example.com.

您可以在没有负载均衡器的情况下配置ECS,我不确定这在这种情况下会有多好的效果。

现在,您说的是服务发现。您仍然可以使用Eureka进行服务发现,让Spring Boot来处理这一点。您可能需要聪明地告诉Eureka您的服务所在的位置(因为Docker容器中的主机名可能是无用的,容器中的端口号也完全是无用的。)您可能需要在这里做一些聪明的事情来正确地导出这个数字,比如使用AWS API进行内省。我认为这个SO答案描述得很正确,或者至少足够接近开始。

另外,显然ECS现在已经内置了服务发现。这要么是我上次使用ECS以来的新情况,要么是我们没有使用它,因为我们有其他解决方案。如果你没有完全被尤里卡绑在一起,因为其他原因。

 类似资料:
  • “在微服务之间添加的同步依赖关系越多,例如查询请求,客户端应用程序的总体响应时间就越差。 “这是真的吗?我认为在同步通信中,我们比异步通信更直接地得到反馈。例如,假设一个用户向微服务a发送http请求,微服务a又异步地向另一个微服务B发送请求,并异步地等待它的答复。如果微服务B关闭,那么用户将等待到超时才能得到响应,而在同步通信中,他将立即得到响应。

  • 我正在构建一个基于Spring云的微服务ML管道。我有一个数据摄取服务,它(当前)从SQL接收数据,这些数据需要被预测服务使用。 普遍的共识是写入应该使用kafka/Rabbitmq使用基于异步消息的通信。 我不确定的是如何编排这些服务? 我是否应该使用API网关来调用启动管道的摄取?

  • 我实际上在研究微服务,我面临一个问题。 上下文 我正在开发两个微服务: 用户管理,基于spring,使用MySQL数据库 计划管理,基于ASP.NET与SQL Server数据库。此服务的唯一访问点是列出一些RESTFULendpoint的API,如 计费管理,基于MongoDB的node.js。 问题 > 我该怎么做才能只允许通过用户服务访问规划信息,而不耦合这两个服务?知道以后可以从其他地方访

  • 我正在从事 服务项目,主要从服务间通信之间的安全角度提出疑问。在我的项目中,我们有 API 网关,它可以筛选所有传入请求是否存在安全问题,然后再将它们路由到适当的微服务。API 网关位于客户端应用程序和微服务之间。然后,它会限制微服务的公开,同时提供其他请求管理功能,例如身份验证、SSL 终止、协议转换、监视、请求路由、缓存等。 假设案例微服务1(MS1) 部门答案预计在这里。

  • 我目前正在做一个Spring Boot微服务项目。我已经创建了服务,每个服务都是单独运行的。有了这个,我需要一些服务来与其他服务进行通信。我怎样才能做到这一点? 我看到了一些关于这一点的博客,它们使用Netflix、Eureka云服务器来实现这一点。有没有什么方法可以在本地环境中实现这一点,而不使用云服务器?