文章目录
springcloud整合consul注意点
- 必须依赖有
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<!-- 必须有健康检查,因为consul就是通过该依赖提供的健康检查接口的返回值来判断服务是否可用的,没有改依赖,consul会认为服务挂掉了-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
如果需要将yaml配置托管到consul注册中心则可以在添加consul-config依赖
- bootstrap.yaml文件必有,配置如下:
# 必须要有bootrap.yaml文件,否则consul客户端的连接地址的默认的127.0.0.1,即application.yaml中配置的consul的地址和端口不会生效
spring:
cloud:
consul:
host: 192.168.177.200
port: 8500
- 如下配置项必须设为true,这样consul会使用ip:port访问服务,默认是false,即通过host:port访问,比如我电脑host是DESKTOP-MHA5LGK,那么最后就是DESKTOP-MHA5LGK:9006,但基本这种情况是调不通的
spring.cloud.consul.prefer-ip-address=true
shell脚本批量删除consul的无效/失效服务
spring.cloud.consul配置详解
spring:
cloud:
consul:
enabled: true //是否启用consul
host: ip // consul server的ip地址
port: 8500 // consul运行的端口号
ribbon:
enabled: true //是否启用ribbon进行客户端负载均衡
config:
enable: true
discovery:
heartbeat: //配置是否进行health check,以及频率
enabled: true
ttlValue: 10
enable:true // 是否去发现其他服务
register:true //是否将自身服务注册到consul中
tags: tagName //为同名的服务打tag用于区分
default-query-tag: tagName
query-passing: true
preferIpAddress: true # 默认是false(比如我电脑的host是DESKTOP-MHA5LGK,那么consul记录的就是DESKTOP-MHA5LGK:9006,即会通过该方式访问
query-passing:config client可以通过配置的url或者服务发现的方式拉取config server的配置。如果服务发现的方式来拉取配置,默认情况下ConsulDiscoveryClient获取服务的时候是根据服务id获取所有服务节点,如果获取了down的服务,则会造成拉取配置失败。ConsulDiscoveryProperties的默认设置queryPassing=false,即返回所有的服务,包括down掉的。通过配置改为true则可返回所有健康检查通过的服务。
preferIpAddress:ConsulDiscoveryProperties这个类是consul服务发现的配置类。默认情况下preferIpAddress值为false,也就是通过host来进行服务地址的注册和检查(即DESKTOP-MHA5LGK:9006),但是当环境不支持host访问时就会出问题,所以需要配置preferIpAddress=true(为true那么访问方式就是192.168.43.38:9000)。
consul界面的配置不生效
我启动服务指定的是common配置文件,consul默认的是application环境,
其实等同于unfied-file-service,application所以这里面所有的配置只是替换了spring,
没有替换spring-common,而spring-common里面是最高的。所以应该这样,unfied-file-service,common,那么consul的配置就会生效。其实配置不生效consul框架也没有打印日志吗
consul命令行
https://www.jianshu.com/p/339cd3d1d7c4
列出所有的数据中心: ./consul catalog datacenters
列出所有的节点:./consul catalog nodes
列出所有的服务:./consul catalog services
consul接口(curl请求的,linux命令行的)
get http://192.168.177.200:8500/v1/agent/services 返回所有服务的注册信息
put http://192.168.177.200:8500/v1/agent/service/deregister/stock-service-9011 删除一个服务
consul创建配置文件
config/demo,local/data
config/demo,test/data
config–配置目录
demo是项目注册名即spring.application.name
local是profiles
data是目录
config:默认值,也可以通过如下配置
---
spring:
profiles: local
cloud:
consul:
host: 127.0.0.1
port: 8500
discovery:
healthCheckPath: /actuator/health
prefer-ip-address: true
config:
fail-fast: false
enabled: true
format: YAML # 默认值
prefix: config # 默认值
defaultContext: application # 默认值
profileSeparator: ',' # 默认值
data-key: data # 默认值
consul配置中心
- jar,外部,consul的yaml都有同一key,读取优先级从高到低【consul>外部> jar】
- 外部配置了同名yaml文件,那么jar中的同名yaml就会完全失效
- key的优先级:jar>外部>consul
jar ----consul
外部—consul
jar —外部