Я использую spring-cloud-config для централизованной настройки и консула для обнаружения сервисов. Подобно первой начальной загрузке eureka - поддерживает ли spring первую загрузку консула, то есть при загрузке клиентской службы - я должен искать сервер конфигурации через консул. В противном случае работает отлично, т.е. в config client bootstrap.properties - я предоставляю spring.cloud.config.uri
= http://localhost:8888 который обнаружил конфигурационный сервер и извлекает из него конфигурацию. И в репозитории конфигурации для моего клиентского приложения я предоставляю конфигурацию консула, например:
spring.cloud.consul.host=localhost ,
spring.cloud.consul.port=8500
Однако, когда я пытаюсь использовать первую загрузку consul, я не могу прочитать свойства с сервера конфигурации.
Клиентское приложение (для начальной загрузки консула):
pom.xml
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<!-- <version>Brixton.BUILD-SNAPSHOT</version> -->
<version>Brixton.M5</version>
<relativePath />
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-consul-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-all</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
</dependencies>
bootstrap.properties:
spring.application.name=demo
spring.cloud.config.failFast=true
spring.cloud.config.retry.maxAttempts=20
spring.cloud.config.retry.initialInterval=3000
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
DemoApplication.java
@EnableDiscoveryClient
@EnableZuulProxy
@SpringBootApplication
public class DemoSleuthApplication {
public static void main(String[] args) {
SpringApplication.run(DemoSleuthApplication.class, args);
}
}
@RefreshScope
@RestController
class RestAPIController
{
@Value(value = "${server.port}")
String port;
@Value(value = "${message}")
String message;
@RequestMapping("/message")
public String welcome(){
String s = this.restTemplate.getForObject("http://localhost:"+this.port+"/message", String.class);
return this.message + s;
}
}
В структуре папок consul K / V store config / demo Ключ / Значение: spring.cloud.config.uri=http://localhost:8888
Config server git repo: не добавлять код сервера конфигурации для краткости demo.properties
server.port=9080
message=test
В идеале, когда я реализую концепцию начальной начальной загрузки consul - я думаю, что consul должен быть запущен, а клиент должен идентифицировать себя с помощью аннотации @EnableDiscoveryClien
t и в свойствах consul - найти URL-адрес сервера конфигурации и получить свойства конфигурации из конфигураций сервера. Но в моем случае служба обнаруживается и регистрируется в консуле, но я не могу прочитать свойства из репозитория git сервера конфигурации.