最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

hystrix的熔断降级

来源:博客园


(资料图片仅供参考)

hystrix的熔断降级

结合Feign 使用

1.A服务通过B服务的唯—标识,从Nacos获取到可调用列表。

2.使用feigh中的Http发起远程请求。

3.超过默认配置的时限,抛出异常,结束该线程。

调用方

依赖
                    org.springframework.cloud            spring-cloud-starter-netflix-hystrix        
在调用方的启动类中
//开启断路器的界面(调用方)@EnableCircuitBreaker
对Feign 中的clients文件的ProducerController进行改造
package com.james.clients;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.RequestMapping;/** * name: 被调方的唯一标识 * path: 被调方的controller层的路径 */@FeignClient(name = "dashan-first",path = "/user",fallback = ConsumerClientFallback.class)public interface ConsumerClient {    /**     * feignClient中的方法与被调方要保持完全一致     * 返回值,注解,路径,参数,方法名 一致     * @return     */    @RequestMapping("/first")    public String first();}
在clients创建 ConsumerClientFallback 自定义的fallback处理类
import org.springframework.stereotype.Component;@Componentpublic class ConsumerClientFallback implements ConsumerClient {    @Override    public String first() {        return "被调方不可以用了,请稍后再次尝试";    }}

yml

ribbon:  #设置超时时间为5秒  ConnectTimeout: 5000  ReadTimeout: 5000#feign开启熔断 默认是 falsefeign:  hystrix:    enabled: true#配置hystrix的默认超时时长.默认为1秒,当1秒钟被调方没有返回结果内容,则直接进行熔断处理hystrix:  command:    default:  #default全局有效,service id指定应用有效      execution:        timeout:          enabled: true        isolation:          thread:#            被调方最大超时的时间            timeoutInMilliseconds: 5000

断路器

1、针对于被调方的服务已经出现了问题,例如调用了10词,8都出现了问题。那么我们认为被调方的接口是不稳定的,后续请求我们应该直接降级掉,不在尝试继续请求真正的接口。注这个时候我们就可以开启断路器,后续的请求不再真正的访问:口,而是直接降级。注意断路器开启后,是可以进行自动状态变换。断路器有三种状态:

1.close.

2.open。

3.halfopen(半开)

被调方

1.添加依赖
                    org.springframework.cloud            spring-cloud-starter-netflix-hystrix-dashboard        
2.配置文件更改
#允许dashboard访问的内容 注意 hystrix 2.0版本以上进行开放hystrix:  dashboard:    proxy-stream-allow-list: "*"#配置允许访问所有的接口路径内容management:  endpoints:    web:      exposure:        include: "*"
3.对于某个接口进行断路器的配置
@RequestMapping("/first")    //1.当该接口出现异常,走的降级方法 注意:降级方法要与本方法的返回值以及参数保持一致    //2. 当该接口的处理速度过慢,也需要走预定好的退路方法。使用的是tomcat的信号量来进行管理每个线程的超时时间    @HystrixCommand(fallbackMethod = "firstFallback",            commandProperties = {                    //开启tomcat的线程                    @HystrixProperty(name = "execution.isolation.strategy",value = "THREAD"),                    //设置每个线程的最大的超时时间                    @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000"),                    //配置开启断路器                    @HystrixProperty(name = "circuitBreaker.enabled",value = "true"),                    //代表该接口如果出现异常的次数达到10次,则开启断路器                    @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "4"),                    //代表总请求数达到50%的请求出现异常,则开启断路器                    @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "50"),                    //代表断路器多少秒后更改我们的断路器的状态,由 open状态改为halfopen状态                    @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "5000")            })    public String first() throws InterruptedException {        //休眠时间//        Thread.sleep(2990);        return  "成功" + name +":"+port;    }    public String firstFallback(){        return name +":"+port+"接口异常!";    }
4.在config文件中配置hystrix.straem流
import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet;import javax.servlet.annotation.WebServlet;@WebServlet("/hystrix.stream")public class HystrixServlet extends HystrixMetricsStreamServlet {}
5.在启动类中加入注解
@SpringBootApplication@EnableDiscoveryClient//被调方的降级处理@EnableHystrix//开启断路器的界面@EnableHystrixDashboard//扫描我们自己配置的servlet路径@ServletComponentScan("com.qf.config")public class SpringCloudConsumerApplication {    public static void main(String[] args) {        SpringApplication.run(SpringCloudConsumerApplication.class);    }}

关键词: