springcloud+consul配置中心、服务注册
consul配置中心、服务注册简介consul用于微服务下的服务治理,主要特点有:服务发现、服务配置、健康检查、键值存储、安全服务通信、多数据中心等关于consul的安装和持久化就不再赘叙,有兴趣可以去windows+consul安装及持久化看一下配置中心添加maven依赖<!--cloud consul 配置中心--><dependency><groupId>
consul配置中心、服务注册
简介
consul用于微服务下的服务治理,主要特点有:服务发现、服务配置、健康检查、键值存储、安全服务通信、多数据中心等
关于consul的安装和持久化就不再赘叙,有兴趣可以去windows+consul安装及持久化看一下
配置中心
添加maven依赖
<!--cloud consul 配置中心-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
<!--cloud consul 注册发现-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
bootstrap-dev.yml(在bootstrap.yml中指定 spring.profiles.active=dev环境)
使用 Spring Cloud Consul Config,需要配置以下信息在 bootstrap-dev.yml 文件
spring.cloud.consul.host:配置consul地址spring.cloud.consul.port:配置consul端口spring.cloud.consul.config.prefix:配置基本文件,默认值configspring.cloud.consul.config.enabled:启动consul配置中心spring.cloud.consul.config.format:consul上面文件的格式 YAML、FILES、PROPERTIES、默认 KEY-VALUEspring.cloud.consul.config.data-key:表示 consul 上面的 KEY 值(或者说文件的名字),默认是 data
具体说说spring.cloud.consul.config.prefix和data-key
- 访问下我们的consul地址,
spring.cloud.consul.config.prefix,其实就是我们的目录,而config目录是如果不配置...config.prefix时默认的

-
spring.cloud.consul.config.data-key是指文件的名称,默认是data
例如
spring:
cloud:
consul:
host: 192.168.0.104 # consul地址
port: 8500
config:
prefix: config # consul目录前置
enabled: true # 是否启用consul配置中心
format: YAML # consul文件格式
data-key: user # consul文件名称
最后连接到的是 config/xxxx/user配置文件
那么上面的xxx又代表什么,再来看一个例子
server:
port: 8000
spring:
application:
name: service-01 # spring服务名
cloud:
consul:
host: 192.168.1.11
port: 8500
config:
prefix: manager-config # consul配置前置
enabled: true # consul启用配置中心
format: YAML # 文件格式
data-key: data # 可以理解为是 文件名
# watch选项为配置监视功能,主要监视配置的改变
watch:
enabled: true
delay: 10000
wait-time: 30
具体是什么关系呢?图解

其实在bootstrap-dev.yml中也可不指定prefix和data-key,不指定的话,prefix默认是config目录,data-key默认的是data文件
服务注册与发现
属性介绍
spring.cloud.consul.discovery.enabled:启用服务发现
spring.cloud.consul.discovery.register:启用服务注册
spring.cloud.consul.discovery.deregister:服务停止时取消注册
spring.cloud.consul.discovery.prefer-ip-address:表示注册时使用IP而不是hostname
spring.cloud.consul.discovery.health-check-interval:健康检查频率
spring.cloud.consul.discovery.health-check-path:健康检查路径
spring.cloud.consul.discovery.health-check-critical-timeout:健康检查失败多长时间后,取消注册
spring.cloud.consul.discovery.instance-id:服务注册标识
# 服务发现配置
discovery:
# 启用服务发现
enabled: true
# 启用服务注册
register: true
# 服务停止时取消注册
deregister: true
# 表示注册时使用IP而不是hostname
prefer-ip-address: true
ip-address: 192.168.10.132
# 执行监控检查的频率
health-check-interval: 30s
# 设置健康检查失败多长时间后,取消注册
health-check-critical-timeout: 30s
# 健康检查的路径
health-check-path: /actuator/info
# 服务注册标识,格式为:应用名称+服务器IP+端口
instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
如果使用健康检查,不要忘记spring-boot-starter-actuator依赖,否则你的服务注册上去后会自动掉下来
<!--cloud consul 健康检查-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
实战练习
创建一个springboot项目,引入相关依赖
<!--cloud consul 配置中心-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
<!--cloud consul 注册发现-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<!--springboot 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--cloud consul 健康检查-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
配置文件
创建两个bootstrap文件,这里是分环境了,或者不分环境也可以(只创建bootstrap文件即可)

bootstrap.yml文件
spring:
profiles:
active: dev
bootstrap-dev.yml区分环境时,创建bootstrap-dev.yml文件配置(不分环境时,以下内容都写入bootstrap.yml中)
server:
port: 8000
spring:
application:
name: cloud-module
cloud:
consul:
host: 192.168.1.31
port: 8500
config:
prefix: cloud-demo
enabled: true
format: YAML
data-key: data
# watch选项为配置监视功能,主要监视配置的改变
watch:
enabled: true
delay: 10000
wait-time: 30
# 服务发现配置
discovery:
# 启用服务发现
enabled: true
# 启用服务注册
register: true
# 服务停止时取消注册
deregister: true
# 表示注册时使用IP而不是hostname
prefer-ip-address: true
ip-address: 192.168.1.31
# 执行监控检查的频率
health-check-interval: 30s
# 设置健康检查失败多长时间后,取消注册
health-check-critical-timeout: 30s
# 健康检查的路径
health-check-path: /actuator/info
# 服务注册标识,格式为:应用名称+服务器IP+端口
instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
从以上配置文件看出consul配置的路径应该是
cloud-demo/cloud-module,dev/data
如果不区分环境,,dev可以不写
配置启动类
@SpringBootApplication
@EnableDiscoveryClient
public class CloudModuleApplication {
public static void main(String[] args) {
SpringApplication.run(CloudModuleApplication.class, args);
}
}
写个接口测试
@RestController
public class DbUserController {
@Autowired
public DbUserService dbUserService;
@GetMapping("/user/{id}")
public R<Object> getUser(@PathVariable Integer id) {
DbUserEntity user = dbUserService.getById(id);
return R.success(user);
}
}
服务已经注册好了

调用接口测试一下

没问题,正常访问到数据库!!
服务已经注册到了consul上,并且使用consul作为服务的配置中心
更多推荐



所有评论(0)