繁体   English   中英

如何创建一个微服务的多个实例:SpringBoot和Spring Cloud

[英]How to create several instances of a Microservice: SpringBoot and Spring Cloud

我是微服务的新手,我遇到了几个概念,如服务注册和负载平衡。 我有以下问题-

  1. 如何创建特定微服务的多个实例?
  2. 使用Eureka Server的 Service Registry 如何帮助在多个微服务实例上分配负载?
  3. 在我的场景中,我创建了 3 个不同的微服务并将它们注册到我的服务注册表中——
    服务注册表配置-
server:
    port: 8761
eureka:
    instance:
        hostname: localhost
    client:
        register-with-eureka: false #this will ensure that this service
                                    #is not itself registered as a client
        fetch-registry: false

客户端配置-

eureka:
    instance:
        prefer-ip-address: true
    client:
        fetch-registry: true #true by default
        register-with-eureka: true #true by default
        service-url:
            defaultZone: http://localhost:8761/eureka 

当我停止我的服务时,我仍然看到这些服务在 Eureka 上运行并收到警告 - 在此处输入图像描述 在此处输入图像描述 有人可以帮我找到这个问题的原因吗?

1.要与另一个实例通信,您可以使用Eureka 找到您要与之通信的服务的地址。 Eureka 将为您提供该服务所有可用实例的列表,您可以选择要与之通信的实例。

2. Eureka 服务器是一个微服务,它跟踪同一系统内其他微服务的位置。 这些其他微服务将自己注册到 Eureka 服务器,以便其他微服务在需要时可以找到并联系它们。 Eureka 服务器充当微服务的目录,允许它们相互查找和通信。 (不确定这是不是你问的)。

3.为了消除警告:

您可以在 Eureka 服务器的属性文件中设置续订阈值限制。

eureka.renewalPercentThreshold=0.85

1.要在本地扩展您的微服务,您可以在不同的端口上运行 Spring Boot 应用程序的多个实例。

首先将您希望在 application.yml 文件中扩展的微服务上的端口更新为:

server:
   port: 0

这将在您每次运行时在随机端口上启动应用程序。

如果您现在运行 2 个应用程序,您将在 Eureka 仪表板上看到 1 个微服务实例。 这是因为它们都具有相同的 Eureka 实例 ID。 要解决此问题,您需要生成一个新的实例 ID,因此请在同一 application.yml 中添加以下内容:

spring:
   application:
       name: "hotel-service"
eureka:
   instance:
       instance-id: "${spring.application.name}:${random.value}"

最后,只需多次运行同一个应用程序。 您可以在 InteliJ 上通过右键单击主 class 并选择运行然后再次执行此操作来执行此操作。 在 IntelliJ 上运行同一个应用程序的多个实例可能需要一些额外的设置,请参阅链接: 如何在 IntelliJ 中运行同一个应用程序两次?

如果您使用的是 Eclipse/STS,请右键单击项目 > Run as > Spring Boot App(执行此操作两次或更多次)。

或者,如果您安装了 maven。 打开一个终端并运行mvn spring-boot:run然后打开一个新终端并再次运行该命令。

现在您应该在 Eureka 仪表板上看到您的应用程序的多个实例。

注意:在生产中,微服务的扩展是由 Devops 团队完成的,例如,可以使用 Kube.netes 等容器编排平台来增加微服务的实例。

2.通常使用 API 网关将传入的网络请求路由到微服务并进行负载均衡,而服务发现允许微服务相互查找和通信。

使用 Eureka 服务发现,微服务将在发现服务器上注册。 一个 API 网关也会在 Eureka 服务器上注册并做负载均衡。

负载均衡的一种方法是循环策略,其中负载均衡器将按顺序轮换可用实例。 这有助于在实例之间平均分配负载。 还有其他负载均衡方法,如最少连接、基于资源(自适应)等。

3.你得到的错误是由于Eureka服务器自带的自我保护模式。 默认情况下,Eureka 服务器期望每 30 秒从微服务收到一次心跳,如果它在 90 秒内没有收到心跳,它将从微服务中注销微服务。 在 Eureka 没有收到来自许多服务的心跳信号的情况下,它会注销每个微服务到一定的限制。 然后它会进入自我保护模式并且不会再注销任何微服务并会尝试重新建立连接,这是因为.network问题可能导致eureka服务器无法接收心跳。

由于您是在本地开发并且停止运行微服务,因此您会看到 Eureka 服务器进入自我保护模式的预期行为,您可以忽略这一点。

您已经在尤里卡服务器中注册了微服务。 只需在不同的端口上运行相同的服务 [hotel-service, rating service]。 Eureka 服务器在注册微服务时检查名称,如果它发现相同的名称它注册了具有不同 {ip-address:port} 格式的微服务,您也可以使用相同的方法进行负载平衡

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM