`

Feign与Hystrix服务熔断服务降级解耦

阅读更多
1. Feign与Hystrix服务熔断服务降级解耦

用@HystrixCommand fallbackMethod是很不好的,因为和业务代码耦合度太高,不利于维护,所以需要解耦。


1.1) 项目microservice-student-provider-hystrix-1004的StudentService.java增加getInfo()方法

public Map<String,Object> getInfo();


1.2) 项目microservice-student-provider-hystrix-1004的StudentServiceImpl.java增加getInfo()方法

@Override
public Map<String, Object> getInfo() {
    Map<String,Object> map=new HashMap<String,Object>();
    map.put("code", 200);
    map.put("info", "业务数据xxxxx");
    return map;
}


1.3) 项目microservice-student-provider-hystrix-1004的StudentController.java增加getInfo()方法,注释之前的getInfo()和getInfoFallback()方法

@ResponseBody
@GetMapping(value="/getInfo")
public Map<String,Object> getInfo() throws InterruptedException{
    Thread.sleep(900);
    return studentService.getInfo();
}


1.4) 项目microservice-student-provider-hystrix-1005重复以上三步

1.5) 公共模块项目microservice-common的StudentClientService接口,新增getInfo方法

@GetMapping(value="/student/getInfo")
public Map<String,Object> getInfo();


1.6) 公共模块项目microservice-common新建StudentClientFallbackFactory类,实现FallbackFactory<StudentClientService>接口

package com.andrew.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Component;
import com.andrew.entity.Student;
import feign.hystrix.FallbackFactory;

@Component
public class StudentClientFallbackFactory implements FallbackFactory<StudentClientService> {
    @Override
    public StudentClientService create(Throwable cause) {
        return new StudentClientService() {
            @Override
            public boolean save(Student student) {
                return false;
            }
            @Override
            public List<Student> list() {
                return null;
            }
            @Override
            public Map<String, Object> getInfo() {
                Map<String, Object> map = new HashMap<String, Object>();
                map.put("code", 500);
                map.put("info", "系统出错,稍后重试");
                return map;
            }
            @Override
            public Student get(Integer id) {
                return null;
            }
            @Override
            public boolean delete(Integer id) {
                return false;
            }
        };
    }
}


1.7) 公共模块项目microservice-common的StudentClientService接口的@FeignClient注解加下fallbackFactory属性

@FeignClient(value="MICROSERVICE-STUDENT",fallbackFactory=StudentClientFallbackFactory.class)


1.8) 项目microservice-student-consumer-feign-80修改StudentConsumerFeignController.java新增方法调用,支持Hystrix

@GetMapping(value="/getInfo")
@ResponseBody
public Map<String,Object> getInfo(){
    return studentClientService.getInfo();
}


1.9) 项目microservice-student-consumer-feign-80的application.yml加上hystrix支持

feign: 
  hystrix: 
    enabled: true


microservice-student-provider-hystrix-1004
Thread.sleep(900); 业务数据xxxxx1004
microservice-student-provider-hystrix-1005
Thread.sleep(2000); 业务数据xxxxx1005

启动microservice-eureka-server-2001
启动microservice-eureka-server-2002
启动microservice-eureka-server-2003
启动microservice-student-provider-hystrix-1004
启动microservice-student-provider-hystrix-1005
启动microservice-student-consumer-feign-80

http://localhost/student/getInfo
随机出现
{"code":500,"info":"系统出错,稍后重试"}
{"code":200,"info":"业务数据xxxxx1004"}


2. Feign Hystrix整合之超时时间配置

Feign Hystrix整合后,hystrix超时时间配置的话要配置到消费端。


2.1) 项目microservice-student-consumer-feign-80的application.yml里增加配置

ribbon: 
  ReadTimeout: 10000
  ConnectTimeout: 9000
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 3000


如果没有ribbon超时时间设置,就会无效。因为还有一个feign也有一个超时时间的设置,当然feign底层是ribbon的封装,所以 直接配置ribbon,ribbon默认超时也是1秒。
这里都是强制要求,ribbon的超时时间要大于hystrix的超时时间,否则 hystrix自定义的超时时间毫无意义。

microservice-student-provider-hystrix-1004
Thread.sleep(1500); 
业务数据xxxxx1004
microservice-student-provider-hystrix-1005
Thread.sleep(2000); 
业务数据xxxxx1005


启动microservice-eureka-server-2001
启动microservice-eureka-server-2002
启动microservice-eureka-server-2003
启动microservice-student-provider-hystrix-1004
启动microservice-student-provider-hystrix-1005
启动microservice-student-consumer-feign-80

http://localhost/student/getInfo
随机出现
{"code":200,"info":"业务数据xxxxx1004"}
{"code":200,"info":"业务数据xxxxx1005"}
分享到:
评论

相关推荐

    12.Spring Cloud中使用Feign

    5. **启用Feign**:在eureka-consumer的配置文件中,启用Feign客户端,并配置Hystrix的熔断和降级策略,以增强服务的健壮性。 6. **启动并测试**:启动Eureka Server,然后依次启动eureka-provider和eureka-...

    SpringCloud-使用熔断器防止服务雪崩-Ribbon和Feign方式示例代码.zip

    Hystrix 是 Netflix 开源的一个用于处理分布式系统中延迟和故障的库,通过隔离服务调用、熔断保护和降级策略来确保系统的稳定性和弹性。 首先,让我们关注 RIBBON。Ribbon 是 Spring Cloud 中的一个客户端负载均衡...

    Feign的最佳实践方式二

    5. 使用Hystrix断路器:集成Hystrix以实现服务降级和熔断,增强系统的容错能力。通过`@HystrixCommand`注解装饰Feign方法,设定熔断策略。 6. 拓展Feign功能:利用Feign的插件机制,可以自定义拦截器、编码器、解码...

    springcloud-eureka分布式微服务框架后端项目demo、提供端集群、消费端、eureka注册中心集群

    6. **Hystrix**:为了增加系统的容错性,SpringCloud Eureka还可以与Hystrix结合,实现服务降级、熔断和隔离,防止因服务依赖故障而引发的雪崩效应。 7. **Zuul或Gateway**:作为边缘服务,Zuul或Spring Cloud ...

    springboot_feign:服务消费者(声明式调用)

    Feign支持Hystrix断路器,可以实现服务降级和熔断机制,避免因某个服务不可用导致整个系统瘫痪。通过添加`@HystrixCommand`注解,我们可以为每个Feign方法添加故障隔离和回退逻辑。 7. **Feign的扩展** Feign本身...

    Spring Boot + Spring Cloud 的综合练习项目

    它包含多个子项目,如Eureka(服务注册与发现)、Zuul(边缘服务和API网关)、Hystrix(容错管理工具)、Feign(声明式HTTP客户端)等。在本练习项目中,可能使用了这些组件来实现服务间的通信、熔断机制、负载均衡...

    微服务基础学习项目,Eurka,ConfigServer,zuul,sleuth,zipkin,ribbon,feign,histrx,actuator,bus

    8. **Hystrix**:Hystrix是Netflix开发的延迟和容错库,它通过隔离请求、降级策略和熔断机制,提高了系统的容错性,防止因单个服务故障导致整个系统瘫痪。 9. **Actuator**:Spring Boot Actuator提供了许多端点来...

    springboot206基于SpringBoot的农商对接系统的设计与实现.zip

    1. 技术选型:SpringBoot作为核心开发框架,结合SpringCloud进行微服务化设计,利用Eureka实现服务注册与发现,Zuul作为API网关,Hystrix进行服务熔断与降级,RabbitMQ实现消息队列,用于异步处理和解耦业务。...

    spring cloud项目3.zip

    10. **服务降级和熔断**:Hystrix提供了服务降级和熔断功能,服务降级是指在系统无法正常提供服务时,选择一种简化的、不影响整个系统的方式提供服务;熔断则是断路器打开后的状态,此时系统不再尝试调用故障服务,...

    基于springcloud预约上门维修服务系统.zip

    8. **熔断和降级机制**:通过Hystrix组件,系统具备了熔断和降级机制,当服务出现故障时,可以快速隔离问题服务,防止故障扩散,同时提供备用策略,保证系统的稳定性。 9. **配置中心**:SpringCloud Config作为...

    gmall-0722-master.zip

    4. **服务熔断与降级(Hystrix)**:Hystrix是Netflix提供的容错管理工具,用于隔离服务间的调用,防止因某个服务故障而影响整个系统。在"gmall-0722-master"中,Hystrix可能会被用来实现熔断、降级和回退策略,增强...

    SpringCloud开发笔记,阿里巴巴内部通用

    例如,Eureka与Zuul配合实现服务的注册和调用,Hystrix和Feign保证服务间的容错能力,而Sentinel则可以提供更细粒度的流量控制。此外,使用Config Server和Nacos进行集中化的配置管理,可以减少配置的复杂性,提高...

    基于springcloud的分布式网上商城系统源码.zip

    5. **断路器**:Hystrix提供了熔断、降级、隔离等机制,防止服务雪崩,确保系统的稳定性。当某个服务不可用时,Hystrix会快速返回错误响应,避免请求堵塞。 6. **分布式事务**:Spring Cloud Data Flow或Seata用于...

    基于微服务的网上商城系统的设计与实现

    3. **服务的熔断降级的设计与实现**: - 利用Hystrix实现服务熔断,当检测到某个服务不可用时,自动切换到备用策略或返回默认值。 4. **服务的网关的设计与实现**: - Gateway作为微服务网关,统一处理所有外部...

    基于springcloud的分布式电商系统源码.zip

    Hystrix用于实现服务降级、熔断和隔离,防止服务雪崩效应,保障系统的稳定性和容错性。 10. **服务跟踪:Zipkin** Zipkin是一个分布式追踪系统,可以帮助我们收集服务之间的调用数据,用于性能分析和故障排查。 ...

    2023 SpringCloudAlibaba分布式微服务 物流系统 实战视频教程 下载 因为太大存百度云盘2.zip

    3. **熔断与降级**:使用Hystrix组件,学习服务的熔断机制,以防止服务雪崩,并理解服务降级策略。 4. **配置管理**:利用Config服务进行配置的集中管理和动态更新,实现环境隔离和配置热更新。 5. **消息队列**:...

    SpringCloud资源文件.zip

    5. **熔断机制**:Hystrix提供服务降级、熔断、隔离等策略,避免因单个服务故障导致整个系统瘫痪。 6. **监控与跟踪**:使用Spring Cloud Sleuth和Zipkin进行服务追踪,帮助分析请求在各个服务间的流转情况,优化...

    springcloud feign调用

    - **Hystrix支持**:Feign默认集成了Hystrix,提供了熔断、降级和隔离等容错机制。当服务不可用时,可以快速失败并执行备用逻辑。 - **Ribbon客户端负载均衡**:Feign通过Ribbon实现了客户端负载均衡,可以根据配置...

    基于SpringCloud分布式微服务+微信小程序实现短视频社交app设计源码.zip

    首先,SpringCloud是微服务开发的主流框架,它提供了包括服务注册与发现、熔断机制、配置中心等一整套解决方案。Eureka作为服务注册与发现的组件,负责管理各个微服务实例,使得服务间的通信变得更加简单。而Zuul...

    Spring cloud Feign 深度学习与应用详解

    Feign 整合了 Ribbon 负载和 Hystrix 熔断,可以不再需要显式地使用这两个组件。Feign 具有如下特性: * 可插拔的注解支持,包括 Feign 注解和 JAX-RS 注解 * 支持可插拔的 HTTP 编码器和解码器 * 支持 Hystrix 和...

Global site tag (gtag.js) - Google Analytics