SpringCloud Feign 之 Fallback初体验

摘要:
SpringCloudFeign之Fallback初体验在微服务框架SpringCloud中,Feign是其中非常重要且常用的组件。本文主要针对Feign的熔断机制Fallback进行简单介绍。@Component@RequestMappingpublicclassFallBackStudentClientimplementsStudentOtherClient{@OverridepublicStudentgetStudent{Studentstudent=newStudent();student.setAge;student.setName;returnstudent;}}接口类在@FeignClient注解的参数指定Fallback类,且需要@Component注解。@Component@FeignClientpublicinterfaceStudentOtherClient{@GetMappingStudentgetStudent;}打开Hystrix熔断功能在bootstrap.yml中增加Hystrix配置。demo地址:https://github.com/lanxuan826/sample-library/tree/master/feigndemo-fallbackps:在测试过程遇到了一个问题,错误内容如图。

SpringCloud Feign 之 Fallback初体验

在微服务框架SpringCloud中,Feign是其中非常重要且常用的组件。Feign是声明式,模板化的HTTP客户端,可以帮助我们更方便快捷调用HTTP API。本文主要针对Feign的熔断机制Fallback进行简单介绍。Fallback主要是用来解决依赖的服务不可用或者调用服务失败或超时,使用默认的返回值。

1.引入Feign

  • pom依赖包

    <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-feign</artifactId>
                <version>1.4.7.RELEASE</version>
    </dependency>
    
  • 启动类Application增加注解

    @SpringBootApplication(scanBasePackages = {"com.xiaoqiang.feigncomsumer"})
    @EnableFeignClients(basePackages = {"com.xiaoqiang.feigncomsumer"})
    @EnableEurekaClient
    public class FeigncomsumerApplication {
        public static void main(String[] args) {
            SpringApplication.run(FeigncomsumerApplication.class, args);
        }
    
    }
    
  • 接口类配置

    @FeignClient(name = "${feign.provider}",path = "/feignprovider")
    @Component
    public interface StudentClient {
    
         @GetMapping("/stud/getStudentList")
         List<Student> getStudentList(@RequestParam(required = false,name = "name") String name);
    }
    

2.Fallback配置

  • FallBack类

这里有一点需要注意的是@RequestMapping中的value,也就是url,不能与接口类中的url一样。因为一个URL不能映射到两个方法上。

@Component
@RequestMapping("fallback/")
public class  FallBackStudentClient implements StudentOtherClient {

    @Override
    public Student getStudent(String name) {
        Student student = new Student();
        student.setAge(0);
        student.setName("fall back test");
        return student;
    }
}
  • 接口类

    在@FeignClient注解的参数指定Fallback类,且需要@Component注解。

@Component
@FeignClient(name = "${feign.provider}",path = "/feignprovider"
        ,fallback = FallBackStudentClient.class)
public interface StudentOtherClient {
    @GetMapping("/stud/getStudent")
    Student getStudent(@RequestParam(required = false, name = "name") String name);
}

  • 打开Hystrix熔断功能

    在bootstrap.yml中增加Hystrix配置。其中Hystrix的默认time-out时间为1s。

    feign:
      name: MFRAMEWORK-PROVIDER
      provider: feignprovider
    ##开启Hystrix断路器
      hystrix:
        enabled: true
    

以上就是Figen的Fallback初体验的全部内容了。

demo地址:https://github.com/lanxuan826/sample-library/tree/master/feigndemo-fallback

ps:在测试过程遇到了一个问题,错误内容如图。

原因:多个接口上的@FeignClient(“相同服务名”)会报错,overriding is disabled。

SpringCloud Feign 之 Fallback初体验第1张

解决:

在application.yml中配置:

spring
	main:  allow-bean-definition-overriding: true

免责声明:文章转载自《SpringCloud Feign 之 Fallback初体验》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇深入研究Electron的主进程和渲染进程8款最新CSS3表单 环形表单很酷下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SpringCloud学习笔记(5):Hystrix Dashboard可视化监控数据

简介 上篇文章中讲了使用Hystrix实现容错,除此之外,Hystrix还提供了近乎实时的监控。本文将介绍如何进行服务监控以及使用Hystrix Dashboard来让监控数据图形化。 项目介绍 sc-parent,父模块(请参照SpringCloud学习笔记(1):Eureka注册中心) sc-eureka,注册中心(请参照SpringCloud学习笔...

8-25 Hystrix两种应用场景介绍

Hytrix在我们的表现层之外,再包装一层Command,也就是表现层在调其它层业务逻辑的时候,他就会把HystrixCommand再封装一层,根据你的隔离级别,再访问其他的业务情况,然后紧接着处理,处理后再返回,这是我们第一种场景。也就是HystrixCommand是写在表现层中的另外一种场景,区别在于,下面的红框把整个表现层都包起来了。也就是当我们的请...

SpringCloud(六)Hystrix配置

hystrix.command.default和hystrix.threadpool.default中的default为默认CommandKey Execution相关的属性的配置: hystrix.command.default.execution.isolation.strategy隔离策略,默认是Thread, 可选Thread|Semaphore...

一文带你了解微服务架构和设计(多图)

最近几年微服务很火,大家都在建设微服务,如果不懂点微服务相关的技术,都不好意思跟同行打招呼了,也见过身边很多人在微服务踩过很多坑,我从 16 年开始接触微服务,有多家大型企业的微服务分布式系统的架构经验,所以就打算跟大家做一期关于微服务的分享,不过微服务和涉及的分布式计算非常的复杂,绝非是一篇文章就可以讲清楚的,本文只是从最简单的概念的基本使用带你入门,...

跟着我一步一步的搭建一个基于springcloud的微服务实例

Table of Contentsgenerated with DocToc microservicecloud 插件推荐 建立父工程Microservicecloud 搭建Employ员工服务创建数据库 创建消费者服务microservicecloud-employconsummer Eureka注册中心搭建 单机模式创建microserv...

spring Cloud中,解决Feign/Ribbon整合Hystrix第一次请求失败的问题?

Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题,要如何解决该问题呢? 造成该问题的原因 Hystrix默认的超时时间是1秒,如果超过这个时间尚未响应,将会进入fallback代码。而首次请求往往会比较慢(因为Spring的懒加载机制,要实例化一些类),这个响应时间可能就大于1秒了。知道原因后,我们...