关于学习SpringCloud的整理

关于学习SpringCloud的整理

这段时间学习了SpringCloud的一些东西,现在整理下来方便以后复习或者供给大家学习参考,如果有不对的地方希望大家指正,我会虚心接受.

1.eureka

1.1 eureka作用

实例化服务,注册到eureka,eureka记录服务,客户端获取服务,基于负载均衡调用服务,定期发送检查心跳.

1.2 eureka记录

服务提供者在启动时,会检测配置属性中的: eureka.client.register-with-erueka=true 参数是否为true,事实上默认就是true。如果值确实为true,则会向EurekaServer发起一个Rest请求,并携带自己的元数据信息,EurekaServer会把这些信息保存到一个双层Map结构中 .

  • 第一层Map的Key就是服务id,一般是配置中的 spring.application.name 属性,user-service
  • 第二层Map的key是服务的实例id。一般host+ serviceId + port,例如: localhost:user-service:8081值则是服务的实例对象,也就是说一个服务,这样可以同时启动多个不同实例,形成集群。
1.3 配置
以下是服务端的配置参数参考

server:
port: ${port:9091}
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
username: root
password: 123
url: jdbc:mysql://localhost:3306/bill-manager
application:
name: bill-service
#整合mybatis
mybatis:
type-aliases-package: com.bobby.pojo #别名搜索
mapper-locations: classpath:/mybatis/*.xml
eureka:
client:
service-url:
defaultZone: HTTP://127.0.0.1:10086/eureka
instance:
prefer-ip-address: true
# ip地址
ip-address: 127.0.0.1
lease-expiration-duration-in-seconds: 5
lease-renewal-interval-in-seconds: 5

1.4 消费端拉取服务备份时间间隔

eureka:
client:
registry-fetch-interval-seconds: 30

1.5 失效保护

eureka:
server:
enable-self-preservation: false # 关闭自我保护模式(缺省为打开)
eviction-interval-timer-in-ms: 1000 # 扫描失效服务的间隔时间(缺省为60*1000ms)

1.6 负载均衡
1.6.1 使用方法
1.添加注解
@LoadBalanced
RestTemplate();
2.使用带服务id的地址
1.6.2 均衡策略与修改

轮循
user-service:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
格式是: {服务名称}.ribbon.NFLoadBalancerRuleClassName ,值就是IRule的实现类。

2. 熔断器(Hystrix)

2.1 雪崩问题

微服务中,服务间调用关系错综复杂,一个请求,可能需要调用多个微服务接口才能实现,会形成非常复杂的调用链路.请求阻塞,用户请求就不会得到响应,则tomcat的这个线程不会释放,于是越来越多的用户请求到来,越来越多的线程会阻塞.

Hystrix 解决雪崩问题的手段,主要包括:
  • 线程隔离
  • 服务降级
2.2 线程隔离

Hystrix为每个依赖服务调用分配一个小的线程池,如果线程池已满调用将被立即拒绝,默认不采用排队,加速失败判定时间。

2.3 服务降级

用户的请求故障时,不会被阻塞,更不会无休止的等待或者看到系统崩溃,至少可以看到一个执行结果(例如返回友好的提示信息).触发服务降级的情况:

  • 线程池已满
  • 请求超时
    使用方法
  • 消费者启动类添加注释@EnableCircuitBreaker
  • 编写降级逻辑
  • 通过Contrller映射方法添加@HystrixCommand(fallbackMethod = “queryByIdFallBack”)注释,指定降级逻辑,或在Controller类添加@DefaultProperties(defaultFallback = “defaultFallback”)指定默认降级逻辑
    超时设置
    hystrix:
    command:
    default:
    execution:
    isolation:
    thread:
    timeoutInMilliseconds: 2000
2.4 服务熔断

状态机有3个状态:

  • Closed:关闭状态(断路器关闭),所有请求都正常访问。
  • Open:打开状态(断路器打开),所有请求都会被降级。Hystrix会对请求情况计数,当一定时间内失败请求,百分比达到阈值,则触发熔断,断路器会完全打开。默认失败比例的阈值是50%,请求次数最少不低于20次。
  • Half Open:半开状态,不是永久的,断路器打开后会进入休眠时间(默认是5S)。随后断路器会自动进入半
    开状态。此时会释放部分请求通过,若这些请求都是健康的,则会关闭断路器,否则继续保持打开,再次进
    行休眠计时
  • 修改熔断策略
    hystrix:
    command:
    default:
    execution:
    isolation:
    thread:
    timeoutInMilliseconds: 2000 #服务降级超时时间
    circuitBreaker:
    errorThresholdPercentage: 50 # 触发熔断错误比例阈值,默认值50%
    sleepWindowInMilliseconds: 10000 # 熔断后休眠时长,默认值5秒
    requestVolumeThreshold: 10 # 熔断触发最小请求次数,默认值是20

3. Feign

Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样。你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做。

3.1 使用Feign
  • 首先这是一个接口,Feign会通过动态代理,帮我们生成实现类。这点跟Mybatis的mapper很像
  • @FeignClient ,声明这是一个Feign客户端,同时通过 value 属性指定服务名称
  • 接口中的定义方法,完全采用SpringMVC的注解,Feign会根据注解帮我们生成URL,并访问获取果
  • @GetMapping中的/user,请不要忘记;因为Feign需要拼接可访问的地址
3.2 Feign 内置ribbon配置

ribbon:
ConnectTimeout: 1000 # 连接超时时长
ReadTimeout: 2000 # 数据通信超时时长
MaxAutoRetries: 0 # 当前服务器的重试次数
MaxAutoRetriesNextServer: 0 # 重试多少次服务
OkToRetryOnAllOperations: false # 是否对所有的请求方式都重试

3.3 Feign 内置Hystrix配置

feign:
hystrix:
enabled: true # 开启Feign的熔断功能

写在最后

关于SpringCloud的学习大多是一些概念和配置方法上的,跟具体逻辑关联不大,容易学习,继续加油.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值