【问题标题】:communication between 2 microservices2个微服务之间的通信
【发布时间】:2019-01-18 19:49:51
【问题描述】:

我有两个使用 Spring Boot 开发的小型微服务。对于这两个服务之间的通信,我没有使用任何 api 网关或消息传递层。

我打算使用 URL(http://)调用其他服务。我将在这里使用 rest 模板。

这里不使用任何 api 网关在两个服务之间进行通信可能有什么缺点。

【问题讨论】:

  • 什么 API 网关?
  • 像 netflix 的 Zuul 或 Spring cloud gateway.. 可用于设置两个微服务之间的通信

标签: spring-mvc microservices


【解决方案1】:

我认为您不想使用 API 网关在您的服务之间进行通信。 API Gateway 用于提供所有外部 API 调用都经过的服务。

如果您不想使用消息传递,您可以直接使用RestTemplate,正如您所提到的,但请记住,如果您直接使用 IP 和端口引用服务,以不同的方式运行它可能会很痛苦未来的环境。

我猜你正在使用 Spring Cloud Netflix 堆栈,如果是这种情况,我会说使用 Eureka 存储服务元数据并直接使用 Feign。它与 Eureka 集成,您基本上可以将逻辑名称解析为实际的 IP 和端口号,如下所示:

http://some-service/endpoint -> http://12.34.56.78:9101/endpoint

在这种情况下,当您想将应用程序部署到具有不同网络设置和端口配置的不同类型的环境中时,从长远来看,您可以节省时间。

【讨论】:

    【解决方案2】:

    API 网关不用于服务之间的通信,如上一个答案中所述,它将是请求访问您的微服务之前的请求的大门。但是,您似乎希望采用同步微服务方法,它具有以下缺点:

    1. 微服务之间的耦合,如果微服务 X 依赖微服务 Y 工作,如果 Y 宕机,那么 X 也会宕机。
    2. 高延迟,如果服务 1 调用服务 2 和服务 3,那么每个请求响应时间将是 3 个服务的总和。
    3. 如果您的服务协调多个服务的调用来处理请求,这就是单点故障。

    我能想到的唯一好处是,您的业务用例将比响应式事件驱动的用例得到更好的控制和更清晰。

    【讨论】:

      猜你喜欢
      • 2021-04-23
      • 2016-08-10
      • 2016-06-10
      • 1970-01-01
      • 2016-03-05
      • 2018-01-22
      • 1970-01-01
      • 2017-07-15
      • 2021-06-20
      相关资源
      最近更新 更多