consul 首先 bootstrap 使用 spring 云配置
consul first bootstrap with spring cloud config
我正在使用 spring-cloud-config 进行集中配置,并使用 consul 进行服务发现。首先像 eureka bootstrap - spring 首先支持 consul bootstrap 即在启动客户端服务时 - 我应该通过 consul 查找配置服务器。另一轮工作得很好,即 - 在配置客户端 bootstrap.properties - 我提供 spring.cloud.config.uri
=http://localhost:8888 找到配置服务器并从中提取配置。在我的客户端应用程序的配置存储库中 - 我提供了 consul 配置,如:
spring.cloud.consul.host=localhost ,
spring.cloud.consul.port=8500
但是,当我首先尝试使用 consul 时 bootstrap 我无法从配置服务器读取属性。
客户申请(首先是领事bootstrap):
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 商店
文件夹结构 config/demo
Key/Value : spring.cloud.config.uri=http://localhost:8888
配置服务器git repo:为简洁起见未添加配置服务器代码
demo.properties
server.port=9080
message=test
理想情况下,当我首先实现 consul 的概念时 bootstrap - 我认为应该启动 consul 并且客户端应该使用 @EnableDiscoveryClien
t 注释和在 consul 属性中识别自己 - 找到配置服务器 url ,并从服务器配置中获取配置属性。但就我而言,正在领事中发现并注册服务,但我无法从配置服务器 git 回购中读取属性。
完成了here。它在 SNAPSHOTS 和 RC2 中可用,有望在下周推出。
为了其他人的利益,在这里提供我的示例代码。我不得不对属性文件做很多修改才能做到这一点。
正如@spencergibb 的回答,它目前仅在 SNAPSHOT 中可用。
这次我没有在consul中使用任何键值属性。
配置服务器代码:
pom.xml:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</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-consul-discovery</artifactId>
</dependency>
application.yml
spring:
profiles:
active: native
cloud:
config:
server:
native:
search-locations: file://${HOME}/properties
consul:
port: 8500
host: localhost
enabled: true
discovery:
enabled: true
register: true
service-name: server --registers in consul as server instead of config-server
hostname: localhost
server:
port: 8888
bootstrap.yml::
spring:
application:
name: config-server
COnfigServerApplication.java
@EnableDiscoveryClient
@EnableConfigServer
@SpringBootApplication
public class SpringConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringConfigServerApplication.class, args);
}
}
客户端微服务:演示
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Brixton.BUILD-SNAPSHOT</version>
<!-- <version>Brixton.M5</version> -->
<relativePath />
</parent>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-all</artifactId>
</dependency>
bootstrap.properties
spring.application.name=demo-spring-cloud-sleuth
spring.cloud.config.failFast=true
spring.cloud.config.retry.maxAttempts=20
spring.cloud.config.retry.initialInterval=3000
spring.cloud.config.enabled=true
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=config-server
spring.cloud.consul.discovery.hostName=localhost
spring.cloud.consul.discovery.register=true -- unless this is there, the service fails to register in consul.
git uri 属性 客户端文件:
server.port=9082
message=message local
foo1=bar
我正在使用 spring-cloud-config 进行集中配置,并使用 consul 进行服务发现。首先像 eureka bootstrap - spring 首先支持 consul bootstrap 即在启动客户端服务时 - 我应该通过 consul 查找配置服务器。另一轮工作得很好,即 - 在配置客户端 bootstrap.properties - 我提供 spring.cloud.config.uri
=http://localhost:8888 找到配置服务器并从中提取配置。在我的客户端应用程序的配置存储库中 - 我提供了 consul 配置,如:
spring.cloud.consul.host=localhost ,
spring.cloud.consul.port=8500
但是,当我首先尝试使用 consul 时 bootstrap 我无法从配置服务器读取属性。
客户申请(首先是领事bootstrap):
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 商店
文件夹结构 config/demo
Key/Value : spring.cloud.config.uri=http://localhost:8888
配置服务器git repo:为简洁起见未添加配置服务器代码 demo.properties
server.port=9080
message=test
理想情况下,当我首先实现 consul 的概念时 bootstrap - 我认为应该启动 consul 并且客户端应该使用 @EnableDiscoveryClien
t 注释和在 consul 属性中识别自己 - 找到配置服务器 url ,并从服务器配置中获取配置属性。但就我而言,正在领事中发现并注册服务,但我无法从配置服务器 git 回购中读取属性。
完成了here。它在 SNAPSHOTS 和 RC2 中可用,有望在下周推出。
为了其他人的利益,在这里提供我的示例代码。我不得不对属性文件做很多修改才能做到这一点。 正如@spencergibb 的回答,它目前仅在 SNAPSHOT 中可用。
这次我没有在consul中使用任何键值属性。 配置服务器代码: pom.xml:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</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-consul-discovery</artifactId>
</dependency>
application.yml
spring:
profiles:
active: native
cloud:
config:
server:
native:
search-locations: file://${HOME}/properties
consul:
port: 8500
host: localhost
enabled: true
discovery:
enabled: true
register: true
service-name: server --registers in consul as server instead of config-server
hostname: localhost
server:
port: 8888
bootstrap.yml::
spring:
application:
name: config-server
COnfigServerApplication.java
@EnableDiscoveryClient
@EnableConfigServer
@SpringBootApplication
public class SpringConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringConfigServerApplication.class, args);
}
}
客户端微服务:演示
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Brixton.BUILD-SNAPSHOT</version>
<!-- <version>Brixton.M5</version> -->
<relativePath />
</parent>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-all</artifactId>
</dependency>
bootstrap.properties
spring.application.name=demo-spring-cloud-sleuth
spring.cloud.config.failFast=true
spring.cloud.config.retry.maxAttempts=20
spring.cloud.config.retry.initialInterval=3000
spring.cloud.config.enabled=true
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=config-server
spring.cloud.consul.discovery.hostName=localhost
spring.cloud.consul.discovery.register=true -- unless this is there, the service fails to register in consul.
git uri 属性 客户端文件:
server.port=9082
message=message local
foo1=bar