Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SpringCloud调用组件Feign

SpringCloud调用组件Feign

作者头像
闻说社
发布于 2025-04-08 09:00:17
发布于 2025-04-08 09:00:17
11300
代码可运行
举报
运行总次数:0
代码可运行

前言

本系列带着大家深入微服务 Spring体系的各个框架的底层原理。上一篇文章介绍了SpringBoot自动装配原理,本节将带着大家熟悉下SpringCloud体系的调用组件Feign


Feign是什么

  • Feign是一个声明式 Web 服务客户端。它使编写 Web 服务客户端更容易
  • 它具有可插入的注解支持,包括 Feign 注解和 JAX-RS 注解
  • Feign 还支持可插拔的编码器和解码器
  • 对 Spring MVC 注解的支持,并支持使用HttpMessageConvertersSpring Web 中默认使用的注解
  • Spring Cloud 集成了 Eureka、Spring Cloud CircuitBreaker 以及 Spring Cloud LoadBalancer,使用 Feign 时提供负载均衡的 http 客户端

SpringCloud整合Feign

加入pom依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
xml 代码解读复制代码<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

启用Feign客户端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java 代码解读复制代码@SpringBootApplication
@EnableFeignClients
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

创建一个 Spring Cloud LoadBalancer client

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java 代码解读复制代码@FeignClient("demo")
public interface DemoFeignClient {
    @RequestMapping(method = RequestMethod.GET, value = "/getDemo")
    DemoDTO getDemo();
}

rpc调用client

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java 代码解读复制代码@RestController
@RequestMapping("/remote")
public class RemoteService {

    @Autowired
    DemoFeignClient demoFeignClient;

    @RequestMapping(value = "/getRemoteDemo")
    public DemoDTO   getRemoteDemo() {
        DemoDTO  result = demoFeignClient.getDemo();
        return result;
    }
}

Feign 核心配置

超时配置

相关配置解释:

connectTimeout :建立连接所用的超时时间

readTimeout :从连接建立时开始,并在返回响应的时间

1)针对feign配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yaml 代码解读复制代码feign:
    client:
        config:
            feignName:
                connectTimeout: 5000
                readTimeout: 5000

2)通用配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yaml 代码解读复制代码feign:
    client:
        config:
            default:
                connectTimeout: 5000
                readTimeout: 5000

拦截器配置

可以使用feign的拦截器功能实现接口的验证、鉴权功能

1)Basic认证

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java 代码解读复制代码@Configuration
public class DemoFeignConfiguration {
    @Bean
    public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
        return new BasicAuthRequestInterceptor("user", "password");
    }
}

2)自定义拦截器实现 需要实现接口RequestInterceptor

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java 代码解读复制代码public interface RequestInterceptor {

  /**
   * Called for every request. Add data using methods on the supplied {@link RequestTemplate}.
   */
  void apply(RequestTemplate template);
}

2.1)请求头放上TOKEN认证信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java 代码解读复制代码public class UserInfoRequestInterceptor implements RequestInterceptor {

    public void apply(RequestTemplate template) {
        template.header("USER-INFO", "TOKEN");
    }
}

2.2)将配置添加到feign

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yaml 代码解读复制代码feign:
    client:
        config:
            feignName:
                connectTimeout: 5000
                readTimeout: 5000
                requestInterceptors:
                    - com.example.UserInfoRequestInterceptor

日志配置

Feign使用过程中需要打印日志可以实现Fegin的Logger功能,可以打印http的调用链路用于功能调试。

1)Logger.Level 级别:

  • NONE,无日志记录(默认)
  • BASIC, 只记录请求方法和 URL 以及响应状态码和执行时间。
  • HEADERS,记录基本信息以及请求和响应标头
  • FULL, 记录请求和响应的标头、正文和元数据

2)配置 2.1) yaml配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yaml 代码解读复制代码logging:
  level:
    com.example.feign.DemoFeign: debug

2.2) Config配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java 代码解读复制代码@Configuration
public class FeignConfiguration {
    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
}

@FeignClient 常用属性

  • name:指定FeignClient的名称
  • url:指定@FeignClient调用的地址,可用于线上调试
  • configuration: Feign配置类
  • fallback: 请求错误回调的处理类
  • path: 指定FeignClient的统一前缀

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring Cloud中Feign配置详解
到目前为止,小伙伴们对Feign的使用已经掌握的差不多了,我们在前文也提到Feign是对Ribbon和Hystrix的整合,那么在Feign中,我们要如何配置Ribbon和Hystrix呢?带着这两个
江南一点雨
2018/04/02
2.3K0
Spring Cloud中Feign配置详解
深入微服务-SpringCloud调用组件Feign
本系列带着大家深入微服务 Spring体系的各个框架的底层原理。上一篇文章介绍了SpringBoot自动装配原理,本节将带着大家熟悉下SpringCloud体系的调用组件Feign
janyxe
2022/04/27
5810
深入微服务-SpringCloud调用组件Feign
spring cloud服务间调用之feign
在微服务架构盛行的年代,我们将一个大型的系统,拆解成各个服务,要完成一个业务逻辑,就可能需要,调用不同服务。比如订单服务调用会员服务。当然我们可以使用JDK自带的URLConnection,或者Apache的Http Client来调用,但是最为优雅的使用feign。
丁D
2022/08/12
9840
spring cloud服务间调用之feign
【Spring Cloud Alibaba】(三)OpenFeign扩展点实战 + 源码详解
书接上文,我们掌握了Feign的基本使用、核心原理,以及Spring Cloud Alibaba如何快速整合Feign,真的太简单了!你是不是觉得这样就够了?但在实际项目使用OpenFeign时,我们常常会遇到各种需求,需要用到它提供的扩展,例如日志分析、自定义统一拦截器、客户端组件配置、GZIP压缩等等,这也正是我接下来在本文中分享的内容:首先我会从原生Feign扩展点配置入手,然后进行OpenFeign扩展点配置实战,最后对OpenFeign是如何实现的进行了源码解读,内容很详细,Let’s go!
天罡gg
2023/03/01
2K0
【Spring Cloud Alibaba】(三)OpenFeign扩展点实战 + 源码详解
每天20分钟之feign
feign对各类http调用包进行了抽象,我们不必自己去调用http包,feign进行了封装
李子健
2022/07/24
2310
Feign调用丢失Header的解决方案
在 Spring Cloud 中 微服务之间的调用会用到Feign,但是在默认情况下,Feign 调用远程服务存在Header请求头丢失问题。
程序员果果
2019/11/28
2.2K0
OpenFeign入门
在配置类中加入@EnableFeignClients注解,该注解引入相关类FeignClientsRegistrar,通过此类进行客户端@FeignClient注册;@FeignClient注解放在接口类中。
用户3293499
2024/10/07
1360
Feign拦截器熔断机制踩坑?
事情是这样的,今天调试调用一个微服务的项目,但是发现在调用的过程中发现内部调用服务的时候 token 没有传递过去。
技术从心
2021/01/18
1.8K0
Feign拦截器熔断机制踩坑?
自定义拦截器(OpenFeign)
问天丶天问
2024/01/20
2640
springcloud系列之-快速上手feign
Feign是一个声明式WebService客户端.使用Feign能让编写WebService客户端更加简单,它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解.Feign也支持可拔插式的编码器和解码器,feign是可以单独使用的,然后springcloud集成了feign之后,为了使feign的使用风格与springmvc使用的风格一致,于是对feign进行了封装,使feign支持了getmapping,postmapping这样注解的调用方式,让调用方式更加统一。
AI码师
2020/11/19
8660
springcloud系列之-快速上手feign
Spring Cloud Edgware新特性之三:使用配置属性自定义Feign的行为
Spring Cloud是当前炙手可热的微服务开发框架。它的功能强大,组件丰富,设计优雅。目前Spring Cloud还在不断发展之中。 Spring Cloud即将发布 SpringCloudEdgware 版本。该版本解决了不少Bug,新增了不少新特性,本系列博客将为大家详细阐述在Spring Cloud Edgware中新增的特性。 我们知道: Ribbon在 SpringCloudBrixton 版中,只能使用Java代码自定义配置 Ribbon在 SpringCloudCamden 版中,可使用J
用户1516716
2018/04/02
1K0
微服务服务间调用组件Feign使用介绍、原理、优化技巧
Feign是一个声明式的Web Service客户端。它让微服务之间的调用变得更简单。Feign具有可插拔式的注解支持,包括Feign 注解和JAX-RS注解。Feign还支持可插拔的编码器和解码器。Spring Cloud增加了对Spring MVC注解的支持,并且也支持Spring WebFlux。
青山师
2023/10/17
9.9K0
SpringCloud声明式服务调用Feign
1.创建一个SpringBoot工程,这里命名为feign-consumer,然后在pom文件中添加依赖:
林老师带你学编程
2019/05/25
4980
Feign:简化微服务通信的利器
Feign 是一个声明式、模板化的 HTTP 客户端,它简化了编写 Web 服务客户端的过程。它的主要目的是使 HTTP API 客户端的开发变得更加简单和直观。Feign 的设计理念是将 HTTP 客户端的细节隐藏在背后,使开发者可以专注于定义与服务端通信的接口而无需关注底层的实现细节。
繁依Fanyi
2024/05/13
6530
SpringCloud Feign
版权声明:本文为博主原创文章,未经博主允许不得转载。
DencyCheng
2018/12/13
1.3K0
Feign 代替RestTemplate
完成对ServerA的配置了,启动ServerA,可以启动2个,最后测试就能看到负载均衡的调用了
收心
2022/08/24
8080
Feign 代替RestTemplate
跟我学Spring Cloud(Finchley版)-10-Feign深入
本节来深入探讨Feign的高级特性。总的来说,Feign是一个相对简单的组件,但细节还是比较多的,一不小心就可能入坑,注意点我会以WARINING的形式标记出来,便于读者查阅。
用户1516716
2019/07/10
7280
Spring Cloud Feign服务之间的调用
微服务架构时代, 服务之间的调用很频繁并且有多种方式, 可以通过 JDK 原生的 URLConnection, Apache 的 Http Client, Netty 的异步 Http Client 或者 Spring 的 RestTemplate 去实现服务间的调用. 但最优雅、最方便的还是Spring Cloud 的 Open Feign.
芥末鱿鱼
2020/09/22
3K0
Java一分钟之-Spring Cloud OpenFeign:声明式服务调用
随着微服务架构的普及,服务间的调用变得越来越频繁且复杂。Spring Cloud OpenFeign作为一种声明式的服务调用方式,极大地简化了服务消费者与服务提供者之间的交互过程,提高了开发效率。本文将深入浅出地探讨OpenFeign的核心概念、常见问题、易错点及其规避策略,并通过具体代码示例加深理解。
Jimaks
2024/06/09
3100
1. feign的使用及原理
  Feign 的英文表意为“假装,伪装,变形”, 是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HTTP请求报文的方式直接调用。Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求,这种请求相对而言比较直观。
用户7798898
2020/09/27
2.3K0
1. feign的使用及原理
相关推荐
Spring Cloud中Feign配置详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验