3

我开始使用 Netflix Eureka 并使用它的 1.1.145 ( https://github.com/Netflix/eureka/tree/1.1.145 ) 版本。

我想在不同端口上本地启动同一应用程序的 2 个实例,并将它们都注册到 Eureka。我正在使用示例服务(https://github.com/Netflix/eureka/blob/1.1.145/eureka-server/conf/sampleservice/sample-eureka-service.properties

因此,我使用上述配置启动 Eureka 本身和 2 个实例——一个应用程序在 8001 端口上,另一个在 8002 端口上。

出于某种原因,我在任何给定时间都只获得了一个在 Eureka 注册的实例。两人开始无一例外,可以和尤里卡对话OK。当我启动第二个实例时,它似乎只是用自己的信息覆盖了关于第一个实例的信息。

我想要的是在 http://localhost/eureka/v2/apps的相同逻辑 eureka.name 下有 2 个“实例”元素

我错过了什么?

4

3 回答 3

6

默认实例 ID 是主机名,因此要在同一主机上运行两个任何东西,您需要手动设置eureka.instance.metadataMap.instanceId(无论如何都可以在 Spring Cloud 应用程序中使用)。

于 2015-05-11T07:23:45.147 回答
4

我正在使用 spring-boot-starter-parent 1.5.1.RELEASE 但是

eureka.instance.metadataMap.instanceId 

不起作用,所以我为我的应用找到了解决方案

首先,将 server.port 设置为零:

server:
  port: 0   # HTTP (Tomcat) port

然后将 eureka.instance.instanceId, 设置为随机值。我使用整数随机数:

eureka:
  instance:
    instanceId: ${spring.application.name}:${random.int}

如果你喜欢长随机数,你可以像这样使用 random.value:

eureka:
  instance:
    instanceId: ${spring.application.name}:${random.value}
于 2017-03-22T20:04:22.673 回答
0

当您希望在同一主机上拥有多个服务实例时,您instanceId可以在运行它们时明确指定它们,如下所示:

    mvn spring-boot:run -Dserver.port=8081 -Deureka.instance.metadataMap.instanceId=instance1

    mvn spring-boot:run -Dserver.port=8082 -Deureka.instance.metadataMap.instanceId=instance2
 ...

或者

   java -jar target/app.jar -Dserver.port=8081 -Deureka.instance.metadataMap.instanceId=instance1
...

您还可以通过在应用程序属性文件中指定它来动态生成它:

eureka.instance.instanceId: applicationname:${spring.application.instance_id:${random.value}}

而且我不确定它是否已链接,但是当我关闭实例(它们甚至可能永远不会取消注册)时,使用尤里卡注销真的很长时间,所以我不得不切换自我保护模式:

eureka.server.enable-self-preservationfalse

于 2016-05-10T14:39:50.240 回答