一个框架,用途是什么,用于什么情况下,在详细探究里面的细节。

Eureka

image.png

Ribbon

Ribbon (1).png

Hystrix

Hystrix.jpg

  1. @GetMapping("/checkStateTimeoutFallback/{userId}")
  2. @HystrixCommand(
  3. // 线程池标识,要保持唯一,不唯一的话就共用了
  4. threadPoolKey = "findResumeOpenStateTimeoutFallback",
  5. // 线程池细节属性配置
  6. threadPoolProperties = {
  7. @HystrixProperty(name="coreSize",value = "2"), // 线程数
  8. @HystrixProperty(name="maxQueueSize",value="20") // 等待队列长度
  9. },
  10. // commandProperties熔断的一些细节属性配置
  11. commandProperties = {
  12. // 每一个属性都是一个HystrixProperty
  13. @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="2000")
  14. // hystrix高级配置,定制工作过程细节如下
  15. ,
  16. // 统计时间窗口定义
  17. @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds",value = "8000"),
  18. // 统计时间窗口内的最小请求数
  19. @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "2"),
  20. // 统计时间窗口内的错误数量百分比阈值
  21. @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "50"),
  22. // 自我修复时的活动窗口长度
  23. @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "3000")
  24. },
  25. fallbackMethod = "myFallBack" // 回退方法
  26. )

Feign

Feign.jpg

Getway

基于高性能的Reactor模式响应式通信 框架Netty,异步非阻塞模型
可以做:参数校验、权限校验、流量监控、日志输出、协议 转换

GateWay.png

配置动态路由,避免硬编码的形式。

  1. gateway:
  2. routes: # 路由可以有多个
  3. - id: service-autodeliver-router # 我们自定义的路由 ID,保持唯一
  4. #uri: http://127.0.0.1:8096 # 目标服务地址 自动投递微服务(部署多实例)
  5. # 动态路由:uri配置的应该是一个服务名称,而不应该是一个具体的服务实例的地址
  6. uri: lb://lagou-service-autodeliver # gateway网关从服务注册中心获取实例信息然后负载后路由
  7. predicates:
  8. # 断言:路由条件,Predicate 接受一个输入参数,返回一个布尔值结果。
  9. #该接口包含多种默 认方法来将 Predicate 组合成其他复杂的逻辑(比如:与,或,非)

Config

场景/作用总结如下:
1)集中配置管理,一个微服务架构中可能有成百上千个微服务,所以集中配置管理 是很重要的(一次修改、到处生效
2)不同环境不同配置,比如数据源配置在不同环境(开发dev,测试test,生产prod) 中是不同的
3)运行期间可动态调整。例如,可根据各个微服务的负载情况,动态调整数据源连 接池大小等配置修改后可用动更新
4)如配置内容发生变化,微服务可以自动更新配置。那么,我们就需要对配置文件进行集中式管理,这也是分布式配置中心的作用。

文件是放在远程仓库里(互联网的gitHub/局域网私服)

SpringCloud的快速复习 - 图6

配置文件放在远程仓库(Git),配置服务需要文件内容得从仓库中拉取。如果子服务需要配置文件则从父服务中拉取。

配置完可以手动刷新:

http://localhost:8080/actuator/refresh, 刷新配置信息 (手动访问触发)

自动刷新

通过一个主题连接各个微服务,打通脉络。基于mq
把由原来刷新客户端改为刷新服务端(服务端刷新后,通知bus的主题,让他发布订阅通知,子服务就去更新)
消息的生产者生产一个主题,如果消费者订阅这个主题,它就能接收到通知(进行更新)。
SpringCloud的快速复习 - 图7

所有的子服务都需要和mq进行交互,配置mq的交互信息。
刷新服务端: http://localhost:9003**/actuator/bus-refresh 结果是刷新一次,全部刷新**

Config.jpg

Stream

Stream 解决的痛点。本质:屏蔽掉了底层不同MQ消息中间件之间的差异,统一了MQ的编程模型,降低 了学习、开发、维护MQ的成本
Stream.jpg