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: 5000 connectTimeout: 5000 cloud-provider-payment: readTimeout: 5000 connectTimeout: 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/json response: 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_BASED slidingWindowSize: 10 minimumNumberOfCalls: 10 automaticTransitionFromOpenToHalfOpenEnabled: : true waitDurationInOpenState: 5s # 半开时候允许的最大请求数量 permittedNumberOfCallsInHalfOpenState: 2 recordExceptions: - java.lang.Exception instances: cloud-provider-payment: baseConfig: default
3. 请求方法上面需要加@CircruitBreaker
隔离板
用来限制对于下游服务的最大并发限制
限流