我有一个适用于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
困扰我的是两个服务共享相同的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应用程序在共享相同配置时的行为会有所不同? 我已经没有想法了,任何帮助都会非常感激!
答案 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。