- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个基于 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/
我正在构建一个基于 spring-cloud 的 dockerized spring-cloud 微服务,该微服务注册到 eureka。注册过程的一部分是向主机询问映射到容器的端口,以便 docker
随着 Brixton Release Train 的发布,我注意到 EurekaInstanceConfigBean 接口(interface)有了更新,具体而言,默认构造函数已设为 private,
我是一名优秀的程序员,十分优秀!