Springcloud 整合Hystrix 断路器,支持Feign客户端调用

时间:2019-08-21
本文章向大家介绍Springcloud 整合Hystrix 断路器,支持Feign客户端调用,主要包括Springcloud 整合Hystrix 断路器,支持Feign客户端调用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1,在这篇博文中,已经大致说过了Springcloud服务保护框架 Hystrix在服务隔离,服务降级,以及服务熔断中的使用

https://www.cnblogs.com/pickKnow/p/11250374.html

2,声明式的调用hystrix,也是很重要的,以及用整合feign 客户端

maven:

<!-- hystrix断路器 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

3,使用@HystrixCommand 

//@HystrixCommand 默认开启服务隔离,是以线程池方式
//@HystrixCommand 默认开启服务降级,fallbackMethod 方法名就是服务的降级名称
//@HystrixCommand 默认开启服务熔断机制
//@Hystrix 要禁止超时时间,默认1 秒,如果没有即使响应,会走业务逻辑,但是也会走服务降级方法,所以要禁止超时时间
@RestController
public class MemberServiceImpl {

    @Autowired
    private OrderServiceFeign orderServiceFeign;

    //@HystrixCommand 默认开启服务隔离,是以线程池方式
    //@HystrixCommand 默认开启服务降级,fallbackMethod 方法名就是服务的降级名称
    //@HystrixCommand 默认开启服务熔断机制
    //@Hystrix 要禁止超时时间,默认1 秒,如果没有即使响应,会走业务逻辑,但是也会走服务降级方法,所以要禁止超时时间
    @HystrixCommand(fallbackMethod = "orderServiceFallback")
    @RequestMapping("/getOrder")
    public Order getOrder(String orderId) {
        System.out.println("orderToUserInfo:" + "当前线程池名称:" + Thread.currentThread().getName());
        return orderServiceFeign.getOrder(orderId);
    }
    
    @RequestMapping("/orderServiceFallback")
    public String orderServiceFallback() {
        return "服务器繁忙,请稍后重试";
    }

}

4,配置文件

###服务启动端口号
server:
  port: 8000
###服务名称(服务注册到eureka名称)  
spring:
    application:
        name: app-aiyuesheng-member
###服务注册到eureka地址
eureka:
  client:
    service-url:
           defaultZone: http://localhost:8100/eureka

           
###因为该应用为注册中心,不会注册自己
    register-with-eureka: true
###是否需要从eureka上获取注册信息
    fetch-registry: true

###设置feign客户端超时时间
ribbon:
###指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间。
 ReadTimeout: 5000
###指的是建立连接后从服务器读取到可用资源所用的时间。 
 ConnectTimeout: 5000   
    
feign:
  hystrix:
enabled: true
    
#### hystrix禁止服务超时时间
hystrix:  
 command: 
   default: 
      execution: 
       timeout: 
        enabled: false

5,在启动类上加上使用Hystrix的注解

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableHystrix
public class MemberApp {
    public static void main(String[] args) {
        SpringApplication.run(MemberApp.class, args);
    }

}

原文地址:https://www.cnblogs.com/pickKnow/p/11388954.html