SpringCloud Hystrix

Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性、容错性与局部应用的弹性,是一个实现了超时机制和断路器模式的工具类库。

服务降级(fallback):

  • 当下游的服务因为某种原因响应过慢,下游服务主动停掉一些不太重要的业务,释放出服务器资源,增加响应速度。
  • 当下游的服务因为某种原因不可用,上游主动调用本地的一些降级逻辑,避免卡顿,迅速返回给用户。
  • 服务降级有很多种降级方式!如开关降级、限流降级、熔断降级,服务熔断属于降级方式的一种。

服务熔断(break):

  • 当下游的服务因为某种原因突然变得不可用或响应过慢,上游服务为了保证自己整体服务的可用性,不再继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用。

服务限流(flowlimit):

  • 只允许系统能够承受的访问量进来,超出的会被丢弃。降级从系统功能优先级角度考虑如何应对故障,而限流则从用户访问压力的角度来考虑如何应对故障。

案例

pom

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            <version>2.2.9.RELEASE</version>
        </dependency>

controller

    @RequestMapping("/postFeign2")
    @HystrixCommand(fallbackMethod = "postFeign2FallBack")
    public String postFeign2(){
        Persion p = new Persion();
        p.setUserName("卢大宝");
        int s = 10/0;
        try {
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return p.getUserName();
    }

    public String postFeign2FallBack(){
        return "请稍后重试";
    }

 完整配置

server:
  port: 8083 #端口号

spring:
  application:
    name: ludb-client-3 #应用名称

eureka:
  instance:
    prefer-ip-address: true #是否使用IP地址注册(用于eureka展示)
    instance-id:  ${spring.cloud.client.ip-address}:${server.port} #当前客户端IP:端口
  client:
    service-url: #设置服务注册中心地址【向注册中心集群注册(注册两台是为了防止第一台宕机还可以挂在第2台上)】
      defaultZone: http://ludb:ludb123@localhost:8761/eureka/,http://ludb:ludb123@localhost:8762/eureka/

    registry-fetch-interval-seconds: 10 #表示10秒拉取一次服务注册信息,默认30秒
    register-with-eureka: true #是否将自己注册到注册中心,默认true

#默认情况下大多数端点都没有通过 http 公开,我们公开了所有端点,以便SpringAdmin访问
management:
  endpoint.health.show-details: always
  endpoints:
    web:
      exposure:
        include: '*'

#设置feign日志监控级别
logging:
  level:
    com.eurekaclient3.feign.FeignService: debug


feign:
  circuitbreaker:
    #开启feign的熔断处理
    enabled: true
  client:
    config:
      default:
        #connectTimeout 防止由于服务器处理时间长而阻塞调用者。
        connectTimeout: 5000
        #readTimeout 从连接建立时开始应用,在返回响应时间过长时触发。
        readTimeout: 5000
hystrix:
  threadpool.default.coreSize: 10 #包裹默认的线程池
  threadpool.messageMoveGroup.coreSize: 5 #包裹默认的线程池

  command.default.execution.isolation.thread.timeoutInMilliseconds: 10000 #熔断超时
  command.messageMoveCommand.execution.isolation.thread.timeoutInMilliseconds: 600000 #熔断超时

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值