SpringCloud Feign 之 Fallback初体验

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。

解决:

在application.yml中配置:

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

原文地址:https://www.cnblogs.com/lanxuan826/p/11488555.html

时间: 2024-11-08 17:55:04

SpringCloud Feign 之 Fallback初体验的相关文章

SpringCloud Feign 之 超时重试次数探究

SpringCloud Feign 之 超时重试次数探究 上篇文章,我们对Feign的fallback有一个初步的体验,在这里我们回顾一下,Fallback主要是用来解决依赖的服务不可用或者调用服务失败或超时,使用默认的返回值.实际应用中, 在Fallback之前,需要对服务配置重试机制,当多次重试服务,还是服务不可用的情况下,就触发Fallback. 这里,我们对重试机制配置以及重试次数进行一次探究. Feign的超时 Feign接口调用分两层,Ribbon(负载均衡)和Hystrix(熔断器

spring cloud 初体验

spring cloud分为注册端.客户端以及消费端 初体验的理解就是: 注册端就是将之前所有的应用在这边进行注册,然后给每个应用都生成自己的标识,这些应用就是来自于客户端,消费端则通过调用注册端(有点数据中心的概念)然后去调用客户端各个的应用. 1.注册端代码: 直接创建maven项目: pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven

SpringCloud Feign通过FallbackFactory显示异常信息

SpringCloud Feign可以进行服务消费,而且内置了Hystrix,能够进行熔断. Feign可以通过fallback指定熔断回调的类.代码示例及讲解可见: https://www.cnblogs.com/expiator/p/10826852.html 但是,有时候我们还需要记录异常信息,可以通过fallbackFactory实现. 服务提供者 示例如下: @RestController public class UserController { @PostMapping("/use

研一前的暑假,深度学习初体验

????在五月二十七号左右,再次来到一所新的城市,即将在这里度过我研究生的三年,之所以来这么早,是因为希望研究生阶段,能够跟着一个研究方向,自己比较感兴趣的导师.找的第一个导师比较偏学术一些,而我又希望自己在研究生阶段能够有一定的项目经历,所以在经过思考后,我和老师表明了我的想法,老师也表示理解,和我推荐了其他的导师.在找导师的过程中,发现比较热门的导师的特点有以下几点.在校刚来的几位导师中,比较年轻的导师无论能力还是学术都比较强,所有也很快就定下了人选.在来之前,自己也大致确立了方向,大数据.

erlang 初体验

最近测试了一下 erlang的坑... 如不出意外.... 大家第一眼看到这语法... 心里第一句一定是"我擦.这TM都是啥!!!!!" 没有变量!!! 没有结构体!!! 没有循环!!! 好吧,至少我是这样想的. 找了半天..连个if也不知道怎么写.. 这记录一些基本常识.. -module(module_name)  %%定义模块 括号内的要和文件名相同. -export([fun1/1 fun2/2]) %%这里是导出2个函数对外使用  函数名/参数名. 一个简单的函数定义如下 f

linux初体验

第一次听到linux这个'词语'是在一次偶然的朋友聊天中朋友提到的,之前压根没听到过'这个东西',所以我可以说是个linux的新新手,菜鸟都不算. 截至到目前,我已经开始linux系统运维学习有差不多10天时间了.在没接触linux之前,我对它的认识仅仅是:它是个计算机系统.决定学习linux系统运维之前,自我以为运维应该是对系统的一些日常维护之类的,不会很难的东西,我更希望运维是个不难的东西,我个人很笨,对难的东西可能接受的很慢,所以我愿意认为运维是很简单的,这样我就可以轻轻松松的掌握运维相关

【Spark深入学习 -15】Spark Streaming前奏-Kafka初体验

----本节内容------- 1.Kafka基础概念 1.1 出世背景 1.2 基本原理 1.2.1.前置知识 1.2.2.架构和原理 1.2.3.基本概念 1.2.4.kafka特点 2.Kafka初体验 2.1 环境准备 2.2 Kafka小试牛刀 2.2.1单个broker初体验 2.2.2 多个broker初体验 2.3 Kafka分布式集群构建 2.3.1 Kafka分布式集群构建 2.3.2 Kafka主题创建 2.3.3 生产者生产数据 2.3.4消费者消费数据 2.3.5消息的

Java8初体验(二)Stream语法详解

原文链接:http://ifeve.com/stream/ 1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel aggregate operations. 我们来解读一下上面的那句话: Stream是元素的集合,这点让Stream看起来用些类似Iterator: 可以支持顺序和并行的对原Stream进行汇聚的操作: 大家可以把Stream当成一个高级版本的

hibernate--CRUD初体验

hibernate的crud操作初体验. 看具体实例 package com.fuwh.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import org.hibernate.annotations.GenericGenerator; @Entity publ