美文网首页
SpringCloud-hystrix实战02-服务降级

SpringCloud-hystrix实战02-服务降级

作者: 天的安排 | 来源:发表于2019-07-18 12:36 被阅读0次

    什么是服务降级

    服务降级处理实在客户端实现完成的,与服务端没有关系

    我们可以思考一下,我们在做熔断处理的时候有这么一个现象:controller中,每个要做熔断的方法都有一个与之对应的熔断方法,这样就会造成方法膨胀。这个时候我们就要做服务降级。

    所谓降级,一般是从整体负荷考虑。就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值。这样做,虽然服务水平下降,但好歹可用,比直接挂掉要强。

    首先,我们可以将controller中的fallback方法全部解耦合到公共api依赖中,做法如下:

    /**
     * 首先这个接口可以对外暴露服务
     *
     * 其次,经过加工后的这个接口还有服务降级解耦的功能,
     * 将提供者的controller中的所有方法的熔断方法统一在这管理
     * 做法:新建一个实现了FallbackFactory接口的类UserClientServiceFallbackFactory
     *
     */
    
    @FeignClient(value="SPRINGBOOT-MYBATIS-PROVIDER-001", fallbackFactory = UserClientServiceFallbackFactory.class)
    public interface UserClientService {
    
        @RequestMapping("/getUserInfo")
        List<User> getUsers();
    
    
        @RequestMapping("/getRealUserInfo/{id}")
        User getRealUserInfo(Integer id);
    }
    /**
     * 千万不要忘记在这个类上面新增@Component注解,否则不好使,注意,这是个大坑
     */
    @Component
    public class UserClientServiceFallbackFactory implements FallbackFactory<UserClientService> {
        public UserClientService create(Throwable throwable) {
            return new UserClientService() {
                public List<User> getUsers() {
                    return null;
                }
    
                public User getRealUserInfo(Integer id) {
                    User user = new User();
                    user.setName("该ID:"+ id +" 没有对应的信息,Consumer客户端提供的降级信息,此刻provide服务关闭");
                    return user ;
                }
            };
        }
    }
    

    目的是为了模拟微服务调用的时候出现timeout或被调的微服务报错的情况的熔断降级

    其次修改springboot-mybatis-consumer-feignhysitrix001中的配置

    #pom.xml中添加熔断依赖
    <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-hystrix -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
                <version>2.1.2.RELEASE</version>
            </dependency>
    
    #修改server port
    server.port=9002
    # 连接池的配置信息
    # 初始化大小,最小,最大
    spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
    #这个配置当filter中没有设置wall的时候,启动是ok的,反之则报错,谨记谨记!
    #spring.datasource.druid.db-type=com.alibaba.druid.pool.DruidDataSource
    spring.datasource.druid.db-type=mysql
    spring.datasource.druid.url=jdbc:mysql://192.168.200.245:2060/ltttest?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull
    spring.datasource.druid.username=root
    spring.datasource.druid.password=&i5Sb_oV<>km
    
    #====================================服务熔断===========================================
    feign.hystrix.enabled=true
    
    #====================================eureka配置=========================================
    spring.application.name=eureka-client-9002
    # 指定eureka server通信地址,注意/eureka/不能少
    eureka.client.service-url.defaultZone=http://eureka10002.com:10002/eureka/,http://eureka10003.com:10003/eureka/,http://eureka10004.com:10004/eureka/
    # 是否注册IP到eureka server,如不指定或设为false,那就会注册主机名到eureka server
    eureka.instance.prefer-ip-address=true
    

    controller(springboot-mybatis-consumer-feignhysitrix001)(ApplicationConsumerfeignhystrix001类)中的修改

    @SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
    @EnableDiscoveryClient
    @EnableFeignClients(basePackages = {"com.hc"})
    @EnableCircuitBreaker
    public class ApplicationConsumerfeignhystrix001 {
        private static Logger logger = Logger.getLogger(ApplicationConsumerfeignhystrix001.class);
    
        /**
         * Start
         */
        public static void main(String[] args) {
            SpringApplication.run(ApplicationConsumerfeignhystrix001.class, args);
    //        logger.info("SpringBoot Start Success");
        }
    }
    

    启动eureka集群(三台)

    启动hystrix提供者(ApplicationProviderHystrix001)

    启动feign消费者(AppUserConsumerFeignHysitrix001)

    1.正常访问



    2.故意关掉提供者服务,然后访问


    相关文章

      网友评论

          本文标题:SpringCloud-hystrix实战02-服务降级

          本文链接:https://www.haomeiwen.com/subject/cgaclctx.html