我开始使用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下的元素我错过了什么?
答案 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-preservation
至false