Hystrix

是什么

做什么?

 

使用方法

服务降级(客户端):

服务熔断和服务降级:

 

Fegin使用Hystrirx

Fegin是以接口形式工作的,它没有方法体,那么@HystrixCommand 针对于上述的方法是不适用于Fegin 的。官网文章如下:

If Hystrix is on the classpath and feign.hystrix.enabled=true, Feign will wrap all methods with a circuit breaker

就是SpringCloud 默认已经为Fegin 整合了Hystrix, 只要Hystrix 在项目的classpaht 中,Feigin 默认就会用断路器包裹所有的方法。官网实现如下:

FeignClient(name = "hello", fallback = HystrixClientFallback.class) //fallback 指定回退的类 protected interface HystrixClient { @RequestMapping(method = RequestMethod.GET, value = "/hello") Hello iFailSometimes(); }

//回退类实现如下,这样针对于每一个feign 的接口方法都有对应的回退

@Component class HystrixClientFallback implements HystrixClient { @Override public Hello iFailSometimes() { return new Hello("fallback"); } }.

 

Fegin 中使用Hystrix 回退时查看回退的原因 使用FallbackFactory

步骤如下:

@FeignClient(name = "microservice-provider-user" ,fallbackFactory=UserFeignClientFallbackFactory.class)

public interface UserFeignClient {

@RequestMapping(value="/{id}",method=RequestMethod.GET)

public User findById(@PathVariable("id") Long id);

}

 

 

//查看回退原因

@Component

class UserFeignClientFallbackFactory implements FallbackFactory{

 

private static final Logger LOGGER = LoggerFactory.getLogger(UserFeignClientFallbackFactory.class);

@Override

public UserFeignClient create(Throwable cause) {

return new UserFeignClient() {

@Override

public User findById(Long id) {

//日志最好放在各个fallback 中,不要放在create 中,否则在引用启动时,就会打印该日志

LOGGER.info("fallback; reason was:" + cause);

User user = new User();

// fallbackFactory 属性还可以让不同的异常返回不同的情况,比如

if (cause instanceof IllegalArgumentException) {

user.setId(-1L);

}else{

user.setId(-2L);

}

user.setUsername("fallbackFactory 用户");

return user;

}

};

}

}

 

为Feign 禁用Hystrix

在SpringCloud 只要Hystrix 在项目的classpath 下,Feign 就会使用断路器包裹Feigin 客户端的方法,有时候项目中并不需要使用此功能,此时可以为Feign 禁用Hystrix

禁用方法如下:

/**

* @author caiqiufang:

* @create date:2018年9月16日 下午1:46:18

* 为Feign 禁用Hystrix 断路功能

* 要想为某个FeignClient 取消Hystrix 断路功能可以使用如下方法

* @FeignClient(name = "microservice-provider-user" ,configuration=FeignDisableHystrixConfiguration.class)

* 在@FeignClient 注释中添加 configuration 并指向 FeignDisableHystrixConfiguration 即可

*/

@Configuration

public class FeignDisableHystrixConfiguration {

 

@Bean

@Scope("prototype")

public Feign.Builder feignBuilder(){

return Feign.builder();

}

}

 

全局禁用Hystrix

在application.properties 中添加 feign.hystrix.enable = false 即可

 

Hystrix Dashboard

为Hystrix 相关项目添加如下依赖

org.springframework.cloud

spring-cloud-starter-hystrix-dashboard

可以将dashboard 注册到eureka 服务中,这样方便管理

如何使用:

1.监控谁就加上对应地址/hystrix.stream

2.延迟的时间

3. 标题的名字

结果如下:

 

 

上述两图颜色对应

图解如下:

但是dashboard 上述这样的监管是只能监管一个服务,不能看到多个服务,下面使用Turbine 来聚合监控数据

Turbine聚合监控数据

它可将所有相关/hystrix.sream 端点的数据聚合到一个组合的/turbine.stream 中,从而让集群的监控变的更加的方便,依赖如下:

org.springframework.cloud

spring-cloud-starter-turbine

 

配置:

server:

port: 8031

spring:

application:

name: microservice-hystrix-turbine

eureka:

client:

service-url:

defaultZone : http://localhsot:8761/eureka/

instance:

prefer-ip-address: true

turbine:

app-config: microservice-consumer-movie-feign-hystrix-fallback-stream,microservice-consumer-movie # 要监控的服务名称

cluster-name-expression: "'default'"

 

启动类:

@SpringBootApplication

@EnableTurbine

public class TurbineApplication {

 

public static void main(String[] args) {

SpringApplication.run(TurbineApplication.class, args);

}

}

 

标注: 感谢 周立 微服务实战相关书籍

你可能感兴趣的:(Hystrix,微服务,javaWeb)