Netflix Eureka和2个本地环境应用实例

时间:2015-04-15 14:47:23

标签: spring-cloud netflix netflix-eureka

我开始使用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注册了一个实例。他们两个都没有例外地开始,可以和Eureka OK谈谈。 当我开始第二个实例时,它似乎只是用自己的信息覆盖第一个实例的信息。

我想要的是拥有2'实例' http://localhost/eureka/v2/apps

下相同逻辑eureka.name下的元素

我错过了什么?

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

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

eureka.instance.metadataMap.instanceId 

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

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

server:
  port: 0   # HTTP (Tomcat) port

然后将eureka.instance.instanceId设置为随机的东西。我使用整数randoms:

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

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

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

答案 2 :(得分: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很长时间,所以我不得不切换自我保存模式:

eureka.server.enable-self-preservationfalse