我正在尝试通过ECS Fargate部署微服务。我正在使用Eureka作为发现服务。客户已在eureka注册,但无法沟通。
首先,我尝试以此方式获得IP
@Bean
@Autowired
public EurekaInstanceConfigBean eurekaInstanceConfig(InetUtils inetUtils){
EurekaInstanceConfigBean config = new EurekaInstanceConfigBean(inetUtils);
String ip = null;
try {
ip = InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
e.printStackTrace();
}
config.setNonSecurePort(8090);
config.setIpAddress(ip);
config.setPreferIpAddress(true);
return config;
}
此解决方案将引发连接被拒绝的异常。
我的下一个尝试是用负载均衡器的URL替换ip。
@Bean
@Autowired
public EurekaInstanceConfigBean eurekaInstanceConfig(InetUtils inetUtils){
EurekaInstanceConfigBean config = new EurekaInstanceConfigBean(inetUtils);
config.setNonSecurePort(8090);
config.setIpAddress(LOADBALANCER_URL);
config.setPreferIpAddress(true);
return config;
}
但是这会抛出com.netflix.client.ClientException: Load balancer does not have available server for client: database
我希望这里有人可以帮助我!
根据您的评论,您可以做几件事。
首先,当您在Docker容器中运行时,无需声明此@Bean
,可以将其替换为以下配置属性:
eureka:
instance:
non-secure-port: 8090
prefer-ip-address: true
要选择正确的IP地址,您必须配置some network interfaces to be ignored,可以通过添加以下内容来实现:
spring:
cloud:
inetutils:
ignoredInterfaces:
- docker0
- veth.*
希望这对您有所帮助。