SpringCloud系列十一:自定义Feign
1. 回顾
上文我们讲解了如何为服务消费者配置Feign。
在Spring Cloud中,Feign的默认配置类是FeignClientsConfiguration,该类定义了Feign默认使用的编码器、解码器、所使用的契约等。
Spring Cloud允许通过注解@FeignClient的configuration属性自定义Feign的配置,自定义配置的优先级比FeignClientsConfiguration要高。
在Spring Cloud的文档中可以看到以下段落,描述了Spring Cloud提供的默认配置。
由上可知,在Spring Cloud中,Feign默认使用的契约是SpringMvcContract,因此它可以使用Spring MVC的注解。
下面自定义Feign的配置,让它使用Feign自带的注解进行工作。
2. 自定义Feign
> 复制项目 microservice-consumer-movie-feign,将ArtifactId修改为 microservice-consumer-movie-feign-customizing
> 创建@ExcludeComponent注解,被此注解注解的类不会被@ComponentScan扫描到
package com.itmuch.cloud.microserviceconsumermoviefeigncustomizing.annotation; public @interface ExcludeComponent {
}
> 创建Feign的配置类
package com.itmuch.cloud.microserviceconsumermoviefeigncustomizing.config; import com.itmuch.cloud.microserviceconsumermoviefeigncustomizing.annotation.ExcludeComponent;
import feign.Contract;
import feign.auth.BasicAuthRequestInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* 该类为Feign的配置类
* 注意:该类不应该在主应用程序上下文的@CompantScan中
*/
@ExcludeComponent
@Configuration
public class FeignConfiguration { /**
* 用feign.Contract.Default替换SpringMvcContract契约
*
* @return
*/
@Bean
public Contract feignContract() {
return new feign.Contract.Default();
} }
> 修改Feign接口,使用@FeignClient的configuration属性指定配置类,同时,将findById上的Spring MVC注解修改为Feign自带的注解。
package com.itmuch.cloud.microserviceconsumermoviefeigncustomizing.feign; import com.itmuch.cloud.microserviceconsumermoviefeigncustomizing.config.FeignConfiguration;
import com.itmuch.cloud.microserviceconsumermoviefeigncustomizing.pojo.User;
import feign.Param;
import feign.RequestLine;
import org.springframework.cloud.openfeign.FeignClient; /**
* 使用@FeignClient的configuration属性,指定feign的配置类
*/
@FeignClient(name = "microservice-provider-user", configuration = FeignConfiguration.class)
public interface UserFeignClient { /**
* 使用feign自带的注解@RequestLine
*
* @param id
* 用户ID
* @return
* 用户信息
*/
@RequestLine("GET /{id}")
User findById(@Param("id") Long id); }
> 修改启动类,将使用@ExcludeComponent注解的类不被@ComponentScan扫描到
package com.itmuch.cloud.microserviceconsumermoviefeigncustomizing; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.web.client.RestTemplate; @SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,
value = {com.itmuch.cloud.microserviceconsumermoviefeigncustomizing.annotation.ExcludeComponent.class}))
public class MicroserviceConsumerMovieFeignCustomizingApplication { public static void main(String[] args) {
SpringApplication.run(MicroserviceConsumerMovieFeignCustomizingApplication.class, args);
} }
> 启动 microservice-discovery-eureka
> 启动 microservice-provider-user
> 启动 microservice-consumer-movie-feign-customizing
> 访问 http://localhost:8010/user/1,页面可获取如下结果,则表示自定义的Feign配置生效
3. 总结
和Ribbon配置自定义一样,Feign的自定义中的配置类(FeignConfiguration)也不能包含在主应用程序上下文的@ComponentScan中,
否则该类中的配置信息就会被所有的@FeignClient共享。
因此,如果只想自定义某个Feign客户端的配置,必须防止@Configuration注解的类所在的包与@ComponentScan扫描的包重叠,
或者指定@ComponentScan不扫描@Configuration类所在包(即本例中的方式)
如果想自定义所有的Feign客户端的配置,则只需将@Configuration注解的类所在的包与@ComponentScan扫描的包重叠即可。
下文将讲解手动创建Feign。敬请期待~~~
4. 参考
周立 --- 《Spring Cloud与Docker微服务架构与实战》
SpringCloud系列十一:自定义Feign的更多相关文章
- SpringCloud系列十一:SpringCloudStream(SpringCloudStream 简介、创建消息生产者、创建消息消费者、自定义消息通道、分组与持久化、设置 RoutingKey)
1.概念:SpringCloudStream 2.具体内容 2.1.SpringCloudStream 简介 SpringCloudStream 就是使用了基于消息系统的微服务处理架构.对于消息系统而 ...
- SpringCloud系列六:Feign接口转换调用服务(Feign 基本使用、Feign 相关配置)
1.概念:Feign 接口服务 2.具体内容 现在为止所进行的所有的 Rest 服务调用实际上都会出现一个非常尴尬的局面,例如:以如下代码为例: Dept dept = this.restTempla ...
- SpringCloud系列十三:Feign对继承、压缩、日志的支持以及构造多参数请求
1. 回顾 上文讲解了手动创建Feign,比默认的使用更加灵活. 本文将讲解Feign对继承.压缩的支持以及日志和多参数请求的构造等. 2. Feign对继承的支持 Feign支持继承.使用继承,可将 ...
- SpringCloud系列——Feign 服务调用
前言 前面我们已经实现了服务的注册与发现(请戳:SpringCloud系列——Eureka 服务注册与发现),并且在注册中心注册了一个服务myspringboot,本文记录多个服务之间使用Feign调 ...
- SpringCloud系列十二:手动创建Feign
1. 回顾 上文讲解了自定义Feign.但是在某些场景下,前文自定义Feign的方式满足不了需求,此时可使用Feign Builder API手动创建Feign. 本文围绕以下场景,为大家讲解如何手动 ...
- SpringCloud系列十:使用Feign实现声明式REST调用
1. 回顾 前文的示例中是使用RestTemplate实现REST API调用的,代码大致如下: @GetMapping("/user/{id}") public User fin ...
- SpringCloud系列——Config 配置中心
前言 Spring Cloud Config为分布式系统中的外部化配置提供了服务器端和客户端支持.有了配置服务器,您就有了一个中心位置来管理跨所有环境的应用程序的外部属性.本文记录实现一个配置中心.客 ...
- SpringCloud系列——Zuul 动态路由
前言 Zuul 是在Spring Cloud Netflix平台上提供动态路由,监控,弹性,安全等边缘服务的框架,是Netflix基于jvm的路由器和服务器端负载均衡器,相当于是设备和 Netflix ...
- springcloud组件梳理之Feign
最近刚好打算做一个springcloud系列的分享,趁此机会刚好梳理下springcloud常用组件的使用,今天先对feign做个简单介绍! feign是一个声明式的Web服务客户端,它使得发送web ...
随机推荐
- Codeforces Round #404 (Div. 2) E. Anton and Permutation(树状数组套主席树 求出指定数的排名)
E. Anton and Permutation time limit per test 4 seconds memory limit per test 512 megabytes input sta ...
- CentOS 7安装tensorflow 1.6
pip3 install tensorflow-gpu==1.6 1.6 依赖于cuda 9.0 cuDNN 7,并且前提需要下载和安装nvidia驱动. 安装驱动 nvidia 驱动地址: http ...
- 1.6(Spring MVC学习笔记)文件上传与下载
一.文件上传 实现文件上传多数是采用表单提交数据, 但对于进行文件上传的表单需要满足一下几个条件 1.表单的method设置为post 2.表单的enctype设置为multipart/form-da ...
- Java高级架构师(一)第07节:远程使用以及冲突解决
- 在C#中快速查询文件
相信使用过Everything的人都对其超快的搜索速度印象非常深刻,它的主要原理是通过扫描NTFS磁盘的USN Journal读取的文件列表,而不是磁盘目录,由于USN Journal非常小,因此能实 ...
- mac 下安装 mysql (蛋疼)
mac先安装mydql步骤 1.首先从官网上下载 mac版本的mysql:我的是mysql-5.7.20-macos10.12-x86_64.dmg 2.正常安装: 3.在系统偏好设置的最底下.1:是 ...
- kubernetes环境下私有仓库搭建
前期在客户那里搭建了基本运行环境,鉴于很多企业的环境都是内部网无法连接外部,因此搭建私有仓库是逃避不开的问题,按照网上的步骤搭建,虽然遇到一些问题,但还好都算容易解决了,下面大致把步骤记录一下便于下次 ...
- 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:3.安装Oracle RAC-3.1.安装并配置ASM驱动
3.1.安装并配置ASM驱动 3.3.1.检查内核 [root@linuxrac2 etc]# uname -r 2.6.18-164.el5 下载以下rpm包(注意rpm包版本和Linux内核版本一 ...
- Microsoft SQL Server 2008 R2
1概述 Microsoft SQL Server 2008 R2 提供完整的企业级技术与工具,帮助您以最低的总拥有成本获得最有价值的信息.您可以充分享受高性能,高可用性,高安全性,使用更多的高效管理与 ...
- Gitlab系列九之取消用户注册页面和删除用户
一.取消用户注册页面 Admin Area--->Settings--->Sign-up enabled(取消前面的勾)---save 二.删除用户 Users----Destroy(点他 ...