一个框架,用途是什么,用于什么情况下,在详细探究里面的细节。
Eureka
Ribbon
Hystrix
@GetMapping("/checkStateTimeoutFallback/{userId}")
@HystrixCommand(
// 线程池标识,要保持唯一,不唯一的话就共用了
threadPoolKey = "findResumeOpenStateTimeoutFallback",
// 线程池细节属性配置
threadPoolProperties = {
@HystrixProperty(name="coreSize",value = "2"), // 线程数
@HystrixProperty(name="maxQueueSize",value="20") // 等待队列长度
},
// commandProperties熔断的一些细节属性配置
commandProperties = {
// 每一个属性都是一个HystrixProperty
@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="2000")
// hystrix高级配置,定制工作过程细节如下
,
// 统计时间窗口定义
@HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds",value = "8000"),
// 统计时间窗口内的最小请求数
@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "2"),
// 统计时间窗口内的错误数量百分比阈值
@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "50"),
// 自我修复时的活动窗口长度
@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "3000")
},
fallbackMethod = "myFallBack" // 回退方法
)
Feign
Getway
基于高性能的Reactor模式响应式通信 框架Netty,异步非阻塞模型
可以做:参数校验、权限校验、流量监控、日志输出、协议 转换等
配置动态路由,避免硬编码的形式。
gateway:
routes: # 路由可以有多个
- id: service-autodeliver-router # 我们自定义的路由 ID,保持唯一
#uri: http://127.0.0.1:8096 # 目标服务地址 自动投递微服务(部署多实例)
# 动态路由:uri配置的应该是一个服务名称,而不应该是一个具体的服务实例的地址
uri: lb://lagou-service-autodeliver # gateway网关从服务注册中心获取实例信息然后负载后路由
predicates:
# 断言:路由条件,Predicate 接受一个输入参数,返回一个布尔值结果。
#该接口包含多种默 认方法来将 Predicate 组合成其他复杂的逻辑(比如:与,或,非)
Config
场景/作用总结如下:
1)集中配置管理,一个微服务架构中可能有成百上千个微服务,所以集中配置管理 是很重要的(一次修改、到处生效)
2)不同环境不同配置,比如数据源配置在不同环境(开发dev,测试test,生产prod) 中是不同的
3)运行期间可动态调整。例如,可根据各个微服务的负载情况,动态调整数据源连 接池大小等配置修改后可用动更新
4)如配置内容发生变化,微服务可以自动更新配置。那么,我们就需要对配置文件进行集中式管理,这也是分布式配置中心的作用。
文件是放在远程仓库里(互联网的gitHub/局域网私服)
配置文件放在远程仓库(Git),配置服务需要文件内容得从仓库中拉取。如果子服务需要配置文件则从父服务中拉取。
配置完可以手动刷新:
http://localhost:8080/actuator/refresh, 刷新配置信息 (手动访问触发)
自动刷新
通过一个主题连接各个微服务,打通脉络。基于mq
把由原来刷新客户端改为刷新服务端(服务端刷新后,通知bus的主题,让他发布订阅通知,子服务就去更新)
消息的生产者生产一个主题,如果消费者订阅这个主题,它就能接收到通知(进行更新)。
所有的子服务都需要和mq进行交互,配置mq的交互信息。
刷新服务端: http://localhost:9003**/actuator/bus-refresh 结果是刷新一次,全部刷新**
Stream
Stream 解决的痛点。本质:屏蔽掉了底层不同MQ消息中间件之间的差异,统一了MQ的编程模型,降低 了学习、开发、维护MQ的成本