iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Spring Cloud中Feign怎么自定义配置与使用
  • 531
分享到

Spring Cloud中Feign怎么自定义配置与使用

2023-07-02 10:07:18 531人浏览 薄情痞子
摘要

这篇文章主要介绍了spring Cloud中Feign怎么自定义配置与使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring Cloud中Feign怎么自定义配置与使用文章都会有所收

这篇文章主要介绍了spring Cloud中Feign怎么自定义配置与使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring Cloud中Feign怎么自定义配置与使用文章都会有所收获,下面我们一起来看看吧。

日志配置

有时候我们遇到 Bug,比如接口调用失败、参数没收到等

问题,或者想看看调用性能,就需要配置 Feign 的日志了,

以此让 Feign 把请求信息输出来。

首先定义一个配置类,代码如下所示。

package com.by.config; import feign.Logger;  import org.springframework.context.annotation.Bean;   import org.springframework.context.annotation.Configu ration;    @Configuration public class FeignConfig {    @Bean    Logger.Level feignLogLevel(){    return Logger.Level.FULL;     }     }

通过源码可以看到日志等级有 4 种,分别是:

  • NONE:不输出日志。

  • BASIC:只输出请求方法的 URL 和响应的状态码以及接 口执行的时间。

  • HEADERS:将 BASIC 信息和请求头信息输出。

  • FULL:输出完整的请求信息。

在 Feign Client 中的 @FeignClient 注解中指定使用的配置类,代码如下所示。

@FeignClient(value = "ws-user- server",configuration = {FeignConfig.class}) public interface UserRemoteClient {  @GetMapping("/user/{id}")   Map getuser(@PathVariable(name = "id") String id); }

在配置文件中执行 Client 的日志级别才能正常输出日志,

格式是“logging.level.client 类地址=级别”。

logging: 
  level: 
    com.by.remote.UserRemoteClient: debug

Basic 认证配置

通常我们调用的接口都是有权限控制的,很多时候可能认证

的值是通过参数去传递的,还有就是通过请求头去传递认证

信息,比如 Basic 认证方式。在 Feign 中我们可以直接配置

Basic 认证,代码如下所示。

@Configuration public class FeignConfig { public BasicAuthRequestInterceptor basicAuthRequestInterceptor(){ return new BasicAuthRequestInterceptor("admin","1357"); } }

或者你可以自定义属于自己的认证方式,其实就是自定义一

个请求拦截器。在请求之前做认证操作,然后往请求头中设

置认证之后的信息。通过实现 RequestInterceptor 接口来

自定义认证方式,代码如下所示。

import feign.RequestInterceptor; import feign.RequestTemplate; public class FeignAuthInteceptor implements RequestInterceptor { @Override public void apply(RequestTemplate requestTemplate) { requestTemplate.header("token",""); }  }

然后将配置改成我们自定义的就可以了,这样当 Feign 去请

求接口的时候,每次请求之前都会进入

FeignAuthInteceptor的 apply 方法中,在里面就可以做属

于你的逻辑了,代码如下所示。

@Configuration public class FeignConfig { @Bean public RequestInterceptor basicAuthRequestInterceptor(){ return new FeignAuthInteceptor(); } }

超时时间配置

通过 Options 可以配置连接超时时间和读取超时时间(代

码如下所示),Options 的第一个参数是连接超时时间

(ms),默认值是 10×1000;第二个是取超时时间

(ms),默认值是 60×1000。

@Configuration public class FeignConfig { @Bean public Request.Options options() { return new Request.Options(5, TimeUnit.SECONDS,6,TimeUnit.SECONDS,true); }  }

客户端组件配置

Feign 中默认使用apache Httpclient 发送 HTTP 请求,我

们可以集成别的组件来替换掉,比如,OkHttp。

配置 OkHttp 只需要加入 OkHttp 的依赖,代码如下所示。

<dependency> <groupId>io.GitHub.openfeign</groupId> <artifactId>feign-okhttp</artifactId> </dependency>

然后修改配置,将 Feign 的 HttpClient 禁用,启用

OkHttp,配置如下:

feign: 
  httpclient:
   enabled: false #禁用
    okhttp:
     enabled: true # 启用

关于配置可参考源码

org.springframework.cloud.openfeign.FeignAutoCon

figuration

GZIP压缩配置

开启压缩可以有效节约网络资源,提升接口性能,我们可以

配置 GZIP 来压缩数据:

feign:
 compression:
  request:
   enabled: true
  response:
   enabled: true

还可以配置压缩的类型、最小压缩值的标准:

feign:
 compression:
  request:
   enabled: true
    mime-types: text/xml,application/xml,application/JSON min-request-size: 2048

只有当 Feign 的 Http Client 不是 okhttp3 的时候,压缩才

会生效,配置源码在 org.springframework.cloud.openfeign.encoding.FeignAcceptGzipE

ncodingAutoConfiguration,代码如下所示。

@Configuration( proxyBeanMethods = false )@EnableConfigurationProperties({FeignClientEnc odingProperties.class}) @ConditionalOnClass({Feign.class}) @ConditionalOnBean({Client.class})  @ConditionalOnProperty( value = {"feign.compression.response.enabled"}, matchIfMissing = false ) @ConditionalOnMissingBean( type = {"okhttp3.OkHttpClient"} ) @AutoConfigureAfter({FeignAutoConfiguration.cl ass})  public class FeignAcceptGzipEncodingAutoConfiguration {  public FeignAcceptGzipEncodingAutoConfiguration() { } @Beanpublic  FeignAcceptGzipEncodingInterceptor feignAcceptGzipEncodingInterceptor(FeignClient EncodingProperties properties) {  return new FeignAcceptGzipEncodingInterceptor(properties) ;  }  }

核心代码就是 @ConditionalOnMissingBean

(type=“okhttp3.OkHttpClient”),表示 Spring

BeanFactory 中不包含指定的 bean 时条件匹配,也就是没

有启用 okhttp3 时才会进行压缩配置。

继承特性

Feign 的继承特性可以让服务的接口定义单独抽出来,作为

公共的依赖,以方便使用。

创建一个module,用于存放 api 接口的定义,增加 Feign

的依赖,定义接口,指定服务名称,代码如下所示

package com.by.client; import org.springframework.cloud.openfeign.FeignClien t; import org.springframework.WEB.bind.annotation.GetMap ping; import java.util.Map;  @FeignClient(value = "ws-user-server") public interface UserRemoteClient {   @GetMapping("/user/{id}")   public Map getuser(@PathVariable(name = "id") String id);    }

打包安装到仓库

修改用户中心实现,先引入依赖

<dependency><groupId>com.by</groupId> <artifactId>ws-api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>

实现 UserRemoteClient 接口,代码如下所示。

@RestController public class UserController implements UserRemoteClient { @Override public Map getuser(@PathVariable(name="id") String id) { Map map=new HashMap(); map.put("id",id);  map.put("name","管理员");   return map;    }    }

修改订单服务,同样引入api,调用代码

@RestController public class OrderController { @Autowired UserRemoteClient userRemoteClient; @GetMapping("/order/query") public Map query(){  Map map=userRemoteClient.getuser("40");  Map rs=new HashMap();  rs.put("orderNum","dd002");  rs.put("user",map); return rs; }   }

多参数请求构造

多参数请求构造分为 GET 请求和 POST 请求两种方式,首

先来看 GET 请求的多参数请求构造方式,代码如下所示。

@GetMapping("/user/info") String getUserInfo(@RequestParam("name")String name,@RequestParam("age")int age);

另一种是通过 Map 来传递多个参数,参数数量可以动态改

变,笔者在这里还是推荐大家用固定的参数方式,不要用

Map 来传递参数,Map 传递参数最大的问题是可以随意传

参。代码如下所示。

@GetMapping("/user/detail") String getUserDetail(@RequestParam Map<String, Object> param);

POST 请求多参数就定义一个参数类,通过

@RequestBody 注解的方式来实现,代码如下所示。

@PostMapping("/user/add") String addUser(@RequestBody User user);

注意: @RequestBody @PathVariable 在实现类上也要

加上注解

@RestController public class UserController implements UserRemoteClient { @Override public Map getuser(@PathVariable(name="id") String id) { Map map=new HashMap(); map.put("id",id);  map.put("name","管理员");  return map; }  }

关于“Spring Cloud中Feign怎么自定义配置与使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Spring Cloud中Feign怎么自定义配置与使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: Spring Cloud中Feign怎么自定义配置与使用

本文链接: https://www.lsjlt.com/news/341488.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Spring Cloud中Feign怎么自定义配置与使用
    这篇文章主要介绍了Spring Cloud中Feign怎么自定义配置与使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring Cloud中Feign怎么自定义配置与使用文章都会有所收...
    99+
    2023-07-02
  • Spring Cloud中怎么配置Feign
    这期内容当中小编将会给大家带来有关Spring Cloud中怎么配置Feign,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Ribbon配置ribbon的配置其实非常简单,直接在application.p...
    99+
    2023-06-19
  • Spring Cloud中Feign怎么使用
    本篇内容主要讲解“Spring Cloud中Feign怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring Cloud中Feign怎么使用”吧!创建公共接口首先我们来创建一个普通的...
    99+
    2023-06-19
  • SpringCloud超详细i讲解Feign自定义配置与使用
    目录日志配置Basic 认证配置超时时间配置客户端组件配置GZIP压缩配置继承特性多参数请求构造日志配置 有时候我们遇到 Bug,比如接口调用失败、参数没收到等 问题,或者想看看调用...
    99+
    2024-04-02
  • Spring Cloud中怎么使用 Feign上传文件
    Spring Cloud中怎么使用 Feign上传文件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。加依赖<dependency> <groupId...
    99+
    2023-05-30
    springcloud feign
  • Spring Cloud中怎么自定义Hystrix请求命令
    Spring Cloud中怎么自定义Hystrix请求命令,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。自定义HystrixCommand我们除了使用@Hyst...
    99+
    2023-06-19
  • Spring Cloud中怎么自定义外部化扩展机制
    这篇文章主要讲解了“Spring Cloud中怎么自定义外部化扩展机制”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Cloud中怎么自定义外部化扩展机制”吧...
    99+
    2023-06-29
  • SpringCloud 核心组件Feign【远程调用&自定义配置】
    目录 1,Feign远程调用 1.1:Feign概述 1.2:Feign替代RestTemplate         1):引入依赖         2):添加注解         3):编写Feign的消费服务,提供服务         ...
    99+
    2023-09-22
    spring cloud java spring Feign
  • Spring Cloud Alibaba 使用 Feign+Sentinel 怎么完成熔断
    这篇文章主要讲解了“Spring Cloud Alibaba 使用 Feign+Sentinel 怎么完成熔断”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Cloud Alib...
    99+
    2023-06-14
  • Spring Boot怎么读取自定义配置文件
    这篇文章给大家分享的是有关Spring Boot怎么读取自定义配置文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。@Value首先,会想到使用@Value注解,该注解只能去解析yaml文件中的简单类型,并绑定到...
    99+
    2023-06-15
  • 详解Spring Boot中如何自定义SpringMVC配置
    目录前言一、SpringBoot 中 SpringMVC 配置概述二、WebMvcConfigurerAdapter 抽象类三、WebMvcConfigurer 接口四、WebMvc...
    99+
    2024-04-02
  • Spring Cloud gateway自定义错误处理Handler怎么实现
    本文小编为大家详细介绍“Spring Cloud gateway自定义错误处理Handler怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring Cloud gateway自定义错误处...
    99+
    2023-07-05
  • Spring Cloud OAuth2怎么实现自定义token返回格式
    这篇“Spring Cloud OAuth2怎么实现自定义token返回格式”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我...
    99+
    2023-07-02
  • 怎么在Spring中自定义NamespaceHandler
    今天就跟大家聊聊有关怎么在Spring中自定义NamespaceHandler,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。定义Beanpackage com.lcl.sp...
    99+
    2023-06-14
  • Spring中自定义拦截器怎么用
    小编给大家分享一下Spring中自定义拦截器怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!创建自定义拦截器类(UserTokenInterceptor)并实...
    99+
    2023-06-29
  • Spring Cloud怎么实现高可用的配置中心
    这篇文章主要为大家展示了“Spring Cloud怎么实现高可用的配置中心”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Spring Cloud怎么实现高可用的配置中心”这篇文章吧。配置中心如何...
    99+
    2023-06-19
  • Spring Cloud中怎么使用Ribbon
    今天小编给大家分享一下Spring Cloud中怎么使用Ribbon的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 什么...
    99+
    2023-06-04
  • Spring中自定义拦截器的使用
    1、创建自定义拦截器类(UserTokenInterceptor)并实现HandlerInterceptor 接口,再重写方法,代码如下: public class UserToke...
    99+
    2024-04-02
  • Feign怎么利用自定义注解实现路径转义
    本篇内容主要讲解“Feign怎么利用自定义注解实现路径转义”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Feign怎么利用自定义注解实现路径转义”吧!背景近期由于项目中需要,所以需要通过Feig...
    99+
    2023-07-02
  • 怎么使用spring data jpa自定义sql方式
    本篇内容介绍了“怎么使用spring data jpa自定义sql方式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!sp...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作