如何创建注册到尤里卡服务注册表的多个尤里卡服务实例?

Posted

技术标签:

【中文标题】如何创建注册到尤里卡服务注册表的多个尤里卡服务实例?【英文标题】:how to create multiple instances of eureka services registered into eureka service registry? 【发布时间】:2017-07-22 03:12:18 【问题描述】:

我已经创建了 eureka 服务注册表并将服务注册到其中。目前只有一个服务实例正在运行。如何添加同一服务的多个实例?我正在开发独立的应用程序。我正在通过 Rest Template 访问服务。我正在关注 https://spring.io/guides/gs/service-registration-and-discovery/

【问题讨论】:

只需运行另一个 eureka 客户端应用程序实例 【参考方案1】:

如果您的目标是在同一主机上运行一项服务的多个实例,您必须:

    用随机数配置 Eureka instance-id 配置服务使用随机端口号

这两个必须单独配置,例如

eureka:
  instance:
    instance-id: $spring.cloud.client.hostname:$spring.application.name:$spring.application.instance_id:$random.value

server:
  port: 0

【讨论】:

既然 Eureka 本身就是发现服务器,那么如果 Eureka 的端口是随机的,服务如何发现 Eureka 服务器呢? @Dojo “随机”端口号在运行时不会是随机的,它会在启动后指定。当然这个“随机”端口号会被注册到 Eureka。 客户端如何知道 Eureka 在哪​​个端口上运行? eureka 服务器的随机端口??【参考方案2】:

每个实例都需要有一个唯一的instanceId,通常在application.yml 中使用:

...
eureka:
   instance:
     metadataMap:
       instanceId: $spring.application.name:$server.port
...

将端口添加到instanceId 允许在同一主机上运行多个实例。

我还看到添加一个随机数而不是实例侦听的端口。

我使用JerseySpringEurekaRibbonFeign 撰写了有关服务注册和发现的博客,并附有源代码http://tech.asimio.net/2016/11/14/Microservices-Registration-and-Discovery-using-Spring-Cloud-Eureka-Ribbon-and-Feign.html

最近在http://tech.asimio.net/2017/03/06/Multi-version-Service-Discovery-using-Spring-Cloud-Netflix-Eureka-and-Ribbon.html 上发布了有关如何使用EurekaRibbon 注册和发现服务的多个版本的博客。

【讨论】:

酷,好文章,所以在使用 feign 时,想象一下,当我使用 @FeignClient(""demo-registration-api-1") 注释时,像“demo-registration-api-1”的 2 个实例这样的服务有不止一个实例在feign客户端,这两个实例服务会被消费吗? 谢谢,这之间有平衡吗?否则这些是重复的调用。 @LipingHuang 当然负载均衡是由 Ribbon 处理的,和多台机器上运行没有区别。【参考方案3】:

一旦你拥有了另一个 eureka 实例,你肯定会需要这里是官方 spring-cloud documentation 关于 eureka 对等体意识。

简而言之,您需要做的就是通过在各自的 application.yml 中添加关于彼此的信息来让它们相互了解。希望这可以帮助。阅读文档以了解详细信息。

---
spring:
  profiles: peer1
eureka:
  instance:
    hostname: peer1
  client:
    serviceUrl:
      defaultZone: http://peer2/eureka/

---
spring:
  profiles: peer2
eureka:
  instance:
    hostname: peer2
  client:
    serviceUrl:
      defaultZone: http://peer1/eureka/

了解 Eureka github Issue、Understanding Spring Cloud Eureka Server self preservation and renew threshold 的其他几个链接。希望这会有所帮助。

【讨论】:

以上是关于如何创建注册到尤里卡服务注册表的多个尤里卡服务实例?的主要内容,如果未能解决你的问题,请参考以下文章

无法将客户端注册到尤里卡服务器

Spring Cloud 服务 - 尤里卡

尤里卡的自我保护模式永远不会恢复

如何在 zuul 启用 Hystrix 断路器?

向 Eureka 服务器注册 Spring Cloud 微服务

尤里卡服务给出请求执行错误?