Spring cloud
Consul
Consul by HashiCorp
分布式服务发现与控制管理系统
1. 作为注册中心为微服务提供服务
2. 独立于业务代码之外
Spring Cloud Consul :: Spring Cloud Consul
-
Consul能干什么?
- 服务发现:提供HTTP和DNS两种发现方式,互相通信就可以用应用名字代替IP了
- 健康检测
- KV存储(全局配置,动态刷新)
- 多数据中心
- 可视化WEB界面
分布式CAP
数据一致性:数据在多个节点的备份需要一致
高可用性:故障不影响访问,速度要在一定范围内
分区容错性:出现网络分区问题,系统仍然运行
配置Consul
1. Pom引用starter依赖
2. 主启动类EnableDiscoveryClient
3. yml里面加入consul配置,服务名,consul地址端口,health check,consul里面存的数据,以及自动刷新,主启动类需要加@RefreshScope注解
4. 数据相关的配置需要放在bootstrap.yml里面因为他比application.yml加载更早
OpenFein
Spring Cloud OpenFeign :: Spring Cloud Openfeign
功能:
1. 在公共模块可以标注声明一个接口,里面的标准和真实调用一致
2. 这样consumer就可以不直接访问真实路径,而是直接调用声明出来的接口方法就可以了
节省调用的代码
3. 自动带有负载均衡
配置方式
openfein Agent:
1. 引入pom依赖(starter和balance)
2. 主启动类里面enableopenfeinclient
openfein节点中
1. pom依赖
2. 注解声明接口@FeignClient("服务名"),写接口
高级特性
1. 超时控制
openfein默认超时时间是1min
Spring Cloud OpenFeign Features :: Spring Cloud Openfeign
openfeign:client:config:default:#超时配置readTimeout: 5000connectTimeout: 5000cloud-provider-payment:readTimeout: 5000connectTimeout: 5000
2. http替换
httpclient:hc5:enabled: true
3. 请求压缩
openfeign:compression:request:enabled: true#达到多大开始压缩min-request-size: 2048#触发压缩的类型mime-types: types=text/xml,application/xml,application/jsonresponse:enabled: true
4. 打印日志
1. 配置Bean
@Bean public Logger.Level openFeinLoggerLevel() {return Logger.Level.FULL; }
2.
logging:level:com:yanxiaotong:cloud:api:PayApiFein: debug
断路器
Circuit Breaker Properties Configuration :: Spring Cloud Circuitbreaker
配置
1. POM:
<!--熔断器--> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId> </dependency> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>
2. yml:
resilience4j:circuitbreaker:configs:default:failureRateThreshold: 50%slidingWindowType: TIME_BASEDslidingWindowSize: 10minimumNumberOfCalls: 10automaticTransitionFromOpenToHalfOpenEnabled: : truewaitDurationInOpenState: 5s# 半开时候允许的最大请求数量permittedNumberOfCallsInHalfOpenState: 2recordExceptions:- java.lang.Exceptioninstances:cloud-provider-payment:baseConfig: default
3. 请求方法上面需要加@CircruitBreaker
隔离板
用来限制对于下游服务的最大并发限制
限流