springcloud(四)

springcloud 专栏收录该内容
6 篇文章 0 订阅

springcloud — hystrix

雪崩问题

服务消费者调用服务提供者中的其中一个服务失败导致后面的服务消费者停滞,并且还有陆续进入请求栈的服务消费者最终导致栈溢出也就是 “雪崩”

在这里插入图片描述
Hystix解决雪崩问题

线程隔离
服务熔断

线程隔离
在这里插入图片描述

Hystrix为每个服务提供者分配一个小的线程池,如果服务消费者请求的服务提供者线程池已满或请求超时将被拒绝,该服务消费者不采取排队,用户的请求将不再直接访问服务,而是通过线程池中的空闲线程来访问服务,如果线程池已满,或者请求超时,则会进行降级处理。
服务降级:优先保证核心服务,就是将某些服务停止,释放资源来维持主要服务的功能。触发Hystix服务降级有 线程池已满请求超时

请求超时如何服务降级

细节:
yml中设置Hystrix超时时间:hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds:

在服务的消费方进行操作

 @EnableCircuitBreaker  : 启动类添加该注解
 
1.导入依赖
        <!--Hystix依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

2.引导类
/**
 * @SpringBootApplication : springboot注解
 * @EnableDiscoveryClient : 启用eureka注解
 * @EnableCircuitBreaker  : 启动熔断注解
 *
 * @SpringCloudApplication : 上述三种注解的组合注解
 */
@SpringCloudApplication
public class ApplicationConsumer1 {
    public static void main(String[] args){
        SpringApplication.run(ApplicationConsumer1.class);
    }

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

3.controller中
@Controller
@RequestMapping(value = "/consumer/user")
@DefaultProperties(defaultFallback = "getProviderFallback") //全局熔断方法
public class ConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping(value = "/get")
    @ResponseBody
    @HystrixCommand
    /**
     *  @HystrixCommand(fallbackMethod = "getProviderFallback") 当请求失败之后调用 getProviderFallback 熔断方法
     *  局部熔断方法
     *
     *  当使用全局熔断方法时 (fallbackMethod = "getProviderFallback") 删除,熔断方法的参数为空,
     *  但是注解依旧存在因为有的方法可能不需要熔断,可以指定特定的熔断方法 @HystrixCommand(fallbackMethod = "熔断方法名称") 此时熔断方法是指定的熔断方法
     *
     *  局部熔断方法的返回值必须与当前方法返回值相同参数列表相同
     * 	全局熔断方法的返回值与被熔断的方法相同参数列表为空
     */
    public String getProvider(){
         return this.restTemplate.getForObject("http://service-provider/provider/user/get",String.class);
    }

    /**
     * 熔断方法
     * @return
     */
    public String getProviderFallback(){
        return "服务器正忙,请稍后再试";
    }
}

4.观察执行结果

在这里插入图片描述
服务熔断

服务消费方可以自己判断某些或者某个服务提供方反映慢或超时的情况下主动熔断服务,当情况有所好转是便可自动从重连

熔断的三个状态:
close:闭合状态,所有请求正常方法
open:打开状态,所有请求都无法访问。如果在一定的时间内,请求错误的概率大于等于50%或者请求的次数大于等于20次那么就会进入打开状态
half open:半开状态,open状态不是永久的,打开后会进入休眠时间(默认是5S)。随后断路器会自动进入半开状态。此时会释放部分请求通过,若这些请求都是健康的,则会完全关闭断路器,否则继续保持打开,再次进行休眠计时

在这里插入图片描述

  • 0
    点赞
  • 1
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

<p> <span>课程目录如下:</span> </p> <p> <span style="color:#333333;">第一章 课程介绍</span> </p> <p> <span style="color:#333333;"></span><span style="color:#333333;">第二章 微服务架构及注册中心eureka与nocos区别</span> </p> <p> <span style="color:#333333;"></span><span style="color:#333333;">第三章 nacos官网介绍及单机部署</span> </p> <p> <span style="color:#333333;"></span><span style="color:#333333;">第章 nacos集群部署</span> </p> <p> <span style="color:#333333;"></span><span style="color:#333333;">第五章 nacos控制台介绍</span> </p> <p> <span style="color:#333333;"></span><span style="color:#333333;">第六章 注册中心nacos(服务注册与发现)</span> </p> <p> <span style="color:#333333;"></span><span style="color:#333333;">第七章 Http客户端及负载均衡之springcloud openfeign</span> </p> <p> <span style="color:#333333;"></span><span style="color:#333333;">第八章 nacos配置中心</span> </p> <p> <span style="color:#333333;"></span><span style="color:#333333;">第九章 课程总结</span> </p> <p> <span style="color:#333333;"><br /></span> </p> <p> <span style="color:#333333;"><span>Alibaba nacos于2018年7月开源,并开始逐步拥抱springcloud社区,alibaba微服务框架大有超越之势,目前热度非常高,其中注册中心nacos就像人之心脏,值得分享与学习下,</span></span><span style="color:#333333;">课件markdown资料及课程源码都已经上传。</span> </p> <p> <span style="color:#333333;"><br /></span> </p>
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值