eureka-js-client为什么我不能为两个服务实例使用相同的主机名?

问题描述

我正在为同一服务部署两个实例,并且两个实例在同一计算机上的不同端口上运行。由于它是一个Nodejs应用程序,因此我使用eureka-js-client进行混音。我的客户端配置yml文件如下:

eureka:
  heartbeatInterval: 30000
  registryFetchInterval: 30000
  host: 'username:passwor@ipadrress'
  port: 8000
  servicePath: '/eureka/apps/'
  preferIpAddress: true

instance:
  app: 'nodejs-service'
  hostName: 'localhost'
  ipAddr: 'localhost'
  statusPageUrl: 'http://localhost:3000'
  port:
    '$': 3000
    '@enabled': 'true'

  vipAddress: 'nodejs-service'
  dataCenterInfo:
    '@class': 'com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo'
    name: 'MyOwn'

对于另一个实例,我只是将端口更改为4000。当我注册3000和4000时,它在eureka页面上仅显示4000实例。也就是说,仅注册一个实例。当我将hostName值之一更改为其他值后,它可以正常工作-已注册了两个实例。但是,我需要主机名相同,因为它们被部署在同一台计算机上。对于Java,相同的hostName可以,我想知道这是由我的yaml配置文件引起的问题。寻求帮助,谢谢!

解决方法

您需要像这样在yml文件中添加instance-id属性:

instance:
  app: 'nodejs-service'
  instanceId: 'node1'