gpt4 book ai didi

java - 覆盖 spring-boot EurekaInstanceConfigBean

转载 作者:行者123 更新时间:2023-11-30 08:15:38 26 4
gpt4 key购买 nike

我正在构建一个基于 spring-cloud 的 dockerized spring-cloud 微服务,该微服务注册到 eureka。注册过程的一部分是向主机询问映射到容器的端口,以便 docker 可以为容器化服务选择一个空闲的主机端口。

我有一个基于主机的服务,dockerized 服务可以请求端口映射,现在我正在尝试使用外部端口向 eureka 注册微服务。

我在我的微服务中获得了正确的端口,但无法覆盖 EurekaInstanceConfig

我尝试过的:

@SpringBootApplication
@EnableEurekaClient
public class ApplicationBootstrapper {

@Value("${containerIp}")
private String containerIp;

@Bean
public EurekaInstanceConfigBean eurekaInstanceConfigBean() {
EurekaInstanceConfigBean config = new EurekaInstanceConfigBean();
String hostPort = new RestTemplate().getForObject(
"http://{hostname}:7691/container/{id}/hostPort",
String.class,
containerIp,
config.getHostname());

config.setPreferIpAddress(true);
config.setIpAddress(containerIp);
config.setNonSecurePort(Integer.valueOf(hostPort));

return config;
}

我的自定义 EurekaInstanceConfigBean 已创建,但未获取配置(服务注册到其内部容器端口)。

问题是:如何覆盖 EurekaInstanceConfigBean

编辑(2):

正如史蒂夫指出的那样,现在 spring-cloud-1.0.0.RELEASE 可用,我以前的大部分解决方案现在都已过时。我附上了我的最终解决方案,以防有人尝试类似的事情:

@Configuration
public class EurekaConfig {

private static final Log logger = LogFactory.getLog(EurekaConfig.class);

@Value("${containerIp}")
private String containerIp;

@Value("${kompositPort:7691}")
private String kompositPort;

@Bean
public EurekaInstanceConfigBean eurekaInstanceConfigBean() {
Integer hostPort = new RestTemplate().getForObject(
"http://{containerIp}:{port}/container/{instanceId}/hostPort",
Integer.class,
containerIp,
kompositPort,
getHostname());

EurekaInstanceConfigBean config = new EurekaInstanceConfigBean();
config.setNonSecurePort(hostPort);
config.setPreferIpAddress(true);
config.setIpAddress(containerIp);
config.getMetadataMap().put("instanceId", getHostname());
return config;
}

private static String getHostname() {
String hostname = null;
try {
hostname = InetAddress.getLocalHost().getHostName();
} catch (UnknownHostException e) {
logger.error("Cannot get host info", e);
}
return hostname;
}

}

最佳答案

这已修复 only 6 days ago .在此修复之前,您为 nonSecurePort 设置的任何内容都将被 ${server.port} 覆盖。我的建议是继承 EurekaInstanceConfigBean 并实现 InitializingBean,但在使用预发布库时你能做些什么,这样你就可以设置端口了afterPropertiesSet()

关于java - 覆盖 spring-boot EurekaInstanceConfigBean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28795602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com