针对上述的标题内容,我准备从两个方面来说,一个是在只集成了Ribbon的项目中使用Hystrix。一个是在Feign项目中使用Hystrix。两种方式略有不同,但是实现的结果都是一样的。

Ribbon中集成Hystrix

首选是在pom中加入Hystrix引用

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

紧接着就是在Service层的调用方法上加入@HystrixCommand注解,并设置熔断时的回调方法

@HystrixCommand(fallbackMethod = "hiError")
    public String sayHi(String message) {
        return restTemplate.getForObject("http://HELLO-SPRING-CLOUD-SERVICE-ADMIN/hi?message=" + message, String.class);
    }
        public String hiError(String message) {
        return "Hi,your message is :\"" + message + "\" but request error.";
    }

然后听到两个服务提供者,重新访问ribbon项目得接口,即可发现,Ribbon服务走了回调方法

spring cloud 防止 XSS 防止脚本攻击_熔断

Feign中使用Hystrix来实现熔断

feign组件中已集成Hystrix,但是默认是不开启的,我们需要在application.yml中设置开启Hystrix。在Feign项目中的application.yml中添加如下设置

feign:
  hystrix:
    enabled: true

接下来我们需要做的是在service中的@FeignClient注解中添加熔断时的毁掉方法
进行如下添加

@FeignClient(value = "hello-spring-cloud-service-admin", fallback = AdminServiceHystrix.class)

紧接着我们创建熔断器类并实现Feign接口

@Component
public class AdminServiceHystrix implements AdminService {
    @Override
    public String say(String message) {
        return "Hi,your message is :\"" + message + "\" but request error.";
    }
}

此时关闭服务提供者,访问之前我们Feign项目的链接http://localhost:8765/hi?message=HelloFeign

也会发现和上述Ribbon的熔断现象一模一样

spring cloud 防止 XSS 防止脚本攻击_SpringCloud_02

Hystrix 常用配置信息

超时时间(默认1000ms,单位:ms)

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds:在调用方配置,被该调用方的所有方法的超时时间都是该值,优先级低于下边的指定配置
hystrix.command.HystrixCommandKey.execution.isolation.thread.timeoutInMilliseconds:在调用方配置,被该调用方的指定方法(HystrixCommandKey 方法名)的超时时间是该值

线程池核心线程数

hystrix.threadpool.default.coreSize:默认为 10
Queue

hystrix.threadpool.default.maxQueueSize:最大排队长度。默认 -1,使用 SynchronousQueue。其他值则使用 LinkedBlockingQueue。如果要从 -1 换成其他值则需重启,即该值不能动态调整,若要动态调整,需要使用到下边这个配置
hystrix.threadpool.default.queueSizeRejectionThreshold:排队线程数量阈值,默认为 5,达到时拒绝,如果配置了该选项,队列的大小是该队列
注意: 如果 maxQueueSize=-1 的话,则该选项不起作用

断路器

hystrix.command.default.circuitBreaker.requestVolumeThreshold:当在配置时间窗口内达到此数量的失败后,进行短路。默认 20 个(10s 内请求失败数量达到 20 个,断路器开)
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds:短路多久以后开始尝试是否恢复,默认 5s
hystrix.command.default.circuitBreaker.errorThresholdPercentage:出错百分比阈值,当达到此阈值后,开始短路。默认 50%
fallback

hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests:调用线程允许请求 HystrixCommand.GetFallback() 的最大数量,默认 10。超出时将会有异常抛出,注意:该项配置对于 THREAD 隔离模式也起作用