spring cloud feign的各种配置的使用
在上一节我们完成了feign的基本使用,学会了feign如何去调用其他微服务,这次我们来完成feign的一些自定义配置。
实现功能:
1、全局修改feign的配置和单独修改feign客户端的配置
2、修改feign默认的契约
3、修改feign的日志级别
4、根据url直接进行调用,RequestInterceptor
5、配置feign请求和响应的压缩,增加请求拦截器(RequestInterceptor-实现添加额外的请求头)
6、配置feign的超时时间
7、配置重试
8、使用hystrix fallback(略,到时候和hystrix集成时在加上)
9、在配置文件中完成上面的配置功能
代码结构:
eureka-server
|- 服务注册中心
feign-conf
|- feign 的父项目
product-provider-8085
product-provider-8086
product-provider-8087
product-provider-8088
|- 服务提供者,对外提供一个简单的商品查询接口,工程的代码大致上是一致的
|- 8085和8086一组,spring.application.name=product-provider-01
|- 8087和8088一组,spring.application.name=product-provider-02
product-consumer-8089 (服务消费者)
conf(feign的自定义配置)
EurekaInfoUrlFeignConfiguration
|- 配置日志和RequestInterceptor(完成增加自定义请求头)
ProductService01FeignConfiguration
|- 修改契约、日志级别、请求超时时间、重试策略和请求拦截器
feign
EurekaInfoUrlFeign
|- @FeignClient 中配置使用 url 直接访问某个服务
ProductService01Feign
|- 针对product-provider-01的微服务进行自定义配置,使用的配置文件为ProductService01FeignConfiguration
ProductService02Feign
|- 调用product-provider-02微服务
controller
EurekaInfoController
|- 请求地址:http://localhost:8089/eureka/info 测试feign直接使用url直连调用,返回注册中心信息
Product01Controller
Product02Controller
|- 请求地址:http://localhost:8089/product[01||02]/selectOne/{productId} 请求上方四个商品微服务,根据01或02不同看返回的结果,看针对product-provider-01的配置是否生效
ApplicationProductConsumer8089
由上可知,我们有2组服务提供者product-provider-01和product-provider-02,如果下方没有特殊说明都是对01进行配置的。
全局修改feign的配置和单独修改feign客户端的配置
使用java配置文件进行修改
@FeignClient中configuration指定的类不可被spring boot上下文扫描到,扫描到就是全局配置,没有就是局部配置
使用application.yml文件进行修改
feign:
client:
config:
default:
配置的内容-就是全局的配置
具体的微服务的名称(spring.application.name的值)
配置的内容-就是局部配置
修改feign默认的契约
1、配置文件(ProductService01FeignConfiguration)的写法:
2、feign客户端上的写法:
修改feign的日志级别
1、配置文件中的写法
2、application.yml文件中修改feign包所在的日志级别
配置feign请求和响应的压缩
1、application.yml配置文件中的写法

2、官网写法
注意:
1、我使用的spring cloud的版本是Edgware.SR3,需要引入okhttp的jar包,不然程序启动报错。
2、增加okhttp的jar包
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</dependency>
3、feign的请求响应压缩的自动配置
配置feign的超时时间
1、全局配置
2、局部配置
配置重试
此处配置的为不进行重试
根据url直接进行调用,设置请求拦截器(RequestInterceptor)
此处需要去访问我的eureka服务注册中心地址,但是我的eureka是有basic认证的,因此需要拦截器增加一个认证头才可以获取到信息。
1、配置拦截器
2、配置文件中的修改
在配置文件中完成上面的配置功能
1、此处完成全局日志的配置和特定的feignClient的日志配置
2、官网上一个较全的写法
使用hystrix fallback(略,到时候和hystrix集成时在加上)
部分运行结果:

完整代码:
https://gitee.com/huan1993/spring-cloud-parent/tree/master/feign-conf
spring cloud feign的各种配置的使用的更多相关文章
- Spring Cloud Feign 组成和配置
Feign的组成 接口 作用 默认值 Feign.Builder Feign的入口 Feign.Builder Client Feign底层用什么去请求 和Ribbon配合时:LoadBalancer ...
- 笔记:Spring Cloud Feign Ribbon 配置
由于 Spring Cloud Feign 的客户端负载均衡是通过 Spring Cloud Ribbon 实现的,所以我们可以直接通过配置 Ribbon 的客户端的方式来自定义各个服务客户端调用的参 ...
- 笔记:Spring Cloud Feign Hystrix 配置
在 Spring Cloud Feign 中,除了引入了用户客户端负载均衡的 Spring Cloud Ribbon 之外,还引入了服务保护与容错的工具 Hystrix,默认情况下,Spring Cl ...
- 笔记:Spring Cloud Feign 其他配置
请求压缩 Spring Cloud Feign 支持对请求与响应进行GZIP压缩,以减少通信过程中的性能损耗,我们只需要通过下面二个参数设置,就能开启请求与响应的压缩功能,yml配置格式如下: fei ...
- Spring Cloud Feign Ribbon 配置
由于 Spring Cloud Feign 的客户端负载均衡是通过 Spring Cloud Ribbon 实现的,所以我们可以直接通过配置 Ribbon 的客户端的方式来自定义各个服务客户端调用的参 ...
- Spring Cloud Feign 在调用接口类上,配置熔断 fallback后,输出异常
Spring Cloud Feign 在调用接口类上,配置熔断 fallback后,出现请求异常时,会进入熔断处理,但是不会抛出异常信息. 经过以下配置,可以抛出异常: 将原有ErrorEncoder ...
- Spring Cloud Feign 自定义配置(重试、拦截与错误码处理) 实践
Spring Cloud Feign 自定义配置(重试.拦截与错误码处理) 实践 目录 Spring Cloud Feign 自定义配置(重试.拦截与错误码处理) 实践 引子 FeignClient的 ...
- 笔记:Spring Cloud Feign 声明式服务调用
在实际开发中,对于服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以我们通常会针对各个微服务自行封装一些客户端类来包装这些依赖服务的调用,Spring Cloud Feign 在此基础上做了进 ...
- Spring Boot + Spring Cloud 实现权限管理系统 配置中心(Config、Bus)
技术背景 如今微服务架构盛行,在分布式系统中,项目日益庞大,子项目日益增多,每个项目都散落着各种配置文件,且随着服务的增加而不断增多.此时,往往某一个基础服务信息变更,都会导致一系列服务的更新和重启, ...
随机推荐
- 事务保存点savepoint
一.
- 我用MRS-ClickHouse构建的用户画像系统,让老板拍手称赞
摘要:在移动互联网时代,用户数量庞大,标签数量众多,用户标签的数据量巨大.用户画像系统中,对于标签的存储和查询,不同的企业有不同的实现方案.当前主流的实现方案采用ElasticSearch方案.但基于 ...
- 昭山欢node资料学习笔记
以前学过一片node工作没有用,忘了,趁这个春节在整理一片 第一章 快速塔建一个局哉网服务器 const http = require("http");var server = h ...
- vue随记
(一)使用props传值: <HeadTitle name-data="100"></HeadTitle> props:['nameData'] 父组件传递 ...
- qsc oj-17 喵哈哈村的排队
http://qscoj.cn/problem/17/ 喵哈哈村的排队 描述 有一堆喵哈哈村的村民们在排队,他们从队列的尾部开始标号,标号为1的村民站在最后面,标号为n的村民站在队列的最前面,而且每个 ...
- Java面向对象系列(2)- 回顾方法的定义
方法的定义 修饰符 返回类型 break:跳出switch,结束循环和return的区别 方法名:注意规范,见名知意 参数列表:(参数类型,参数名) 异常抛出 package oop.demo01; ...
- 深度理解JVM
1. 环境搭建 安装jdk 2. 内存溢出场景模拟 public class Test01 { public static void main(String[] args) { //测试内存溢出 ...
- 『Python』matplotlib划分画布的主要函数
1. subplot() 绘制网格区域中几何形状相同的子区布局 函数签名有两种: subplot(numRows, numCols, plotNum) subplot(CRN) 都是整数,意思是将画布 ...
- [转载]解决虚拟机中Centos7出现错误:Failed to start LSB: Bring up/down networking
1.执行 service network restart 出现以下错误 Restarting network (via systemctl): Job for network.service fai ...
- 当你创建了一个 Deployment 时,Kubernetes 内部发生了什么?
我们通常使用 kubectl 来管理我们的 Kubernetes 集群. 当我们需要一个 Nginx 服务时,可以使用以下命令来创建: kubectl create deployment nginx ...