JHipster微服务无法在AWS上正确注册到Eureka

时间:2018-05-03 11:10:04

标签: spring-boot amazon-ec2 jhipster netflix-eureka

我有一个适用于AWS的Spring Cloud应用程序。 我决定添加JHipster生成的微服务(JHipster网关和UAA)。 这两种服务都注册到现有的Eureka Server,就像之前的所有服务一样。

在本地计算机上运行正常,或在AWS上的EC2实例上部署的Docker容器中运行。

但是,在不同的EC2实例上部署时,JHipster生成的服务未正确注册。 Eureka UI显示:

Application     AMIs                Availability Zones              Status
HELLO-SERVICE   ami-809f84e6 (2)    eu-west-1b (1), eu-west-1a (1)  UP (2) - i-02eg07053a672ea37 , i-083c2f2204d01f4ba
UAA             n/a (2)             (2)                             UP (2) - 97b39345fb59:uaa:9999 , ga6831e52701:uaa:9999
  • " HELLO-SERVICE"是一个简单的春季启动应用程序Eureka显示AWS信息,并将其链接到正在运行的私有IP /端口。
  • " UAA"由Jhipster生成。 Eureka缺少此服务的AWS信息,并将其链接到无效的172.17.x.x.x地址。

困扰我的是两个服务共享相同的eureka配置文件:

eureka:
  datacenter: cloud
  instance:
    preferIpAddress: true
  client:
    healthcheck:
      enabled: true
    registerWithEureka: true
    fetchRegistry: true
    region: eu-west-1
    preferedSameZone: true
    availabilityZones:
      eu-west-1: eu-west-1a,eu-west-1b
    serviceUrl:
      eu-west-1a: http://[eurekainstance]:8761/eureka/
      eu-west-1b: http://[eurekainstance]:8761/eureka/

为什么JHipster生成的应用程序和简单的Spring Boot应用程序在共享相同配置时的行为会有所不同? 我已经没有想法了,任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:0)

如果对某人有用,我会回答我自己的问题。 这个问题与JHipster或AWS无关,但与Docker无关。

添加EurekaInstanceConfigBean解决了它:

public EurekaInstanceConfigBean eurekaInstanceConfig(InetUtils inet) {
        EurekaInstanceConfigBean config = new EurekaInstanceConfigBean(inet);
        AmazonInfo info = AmazonInfo.Builder.newBuilder().autoBuild("eureka");
        config.setDataCenterInfo(info);
        info.getMetadata().put(AmazonInfo.MetaDataKey.localHostname.getName(), info.get(AmazonInfo.MetaDataKey.localIpv4));
        config.setHostname(info.get(AmazonInfo.MetaDataKey.localHostname));
        config.setIpAddress(info.get(AmazonInfo.MetaDataKey.localIpv4));
        config.setNonSecurePort(port);
        return config;
    }

有关详细信息,请参阅the documentation