项目源代码:https://download.csdn.net/download/weixin_42950079/87177425


Feign 是 Netflix 公司开发的声明式 HTTP 客户端,能够帮助我们更加便捷、优雅的调用 HTTP API。并且 Feign 内置了 Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。

  • Feign 有一套自己的注解,想要使用 Feign 是需要学习这一套注解 ( 如:@RequestMapping --> @RequestLine@Pathvairable --> @Param)。

  • Spring Cloud 1 早期版本就是用的原生Fegin. 随着netflix的停更替换成了Open feign

契约配置

前面讲了一大堆,还想都还是没有讲到什么是契约配置,契约配置有什么作用?

根据前面的概念描述,我们知道了 Spring Cloud 的早期版本使用的就是 Feign。所以有些公司开发使用的就是早期的 Spring Cloud,而在后期公司想进行版本升级的时候,改成使用Spring Cloud OpenFeign,但 Feign 使用的是他自己独有的那一套注解,如果我们想全部进行修改成 Spring MVC注解的话,就会非常麻烦!那么有没有办法,让我们升级版本又不需要改动太多代码呢?

  • Spring Cloud 在 Feign 的基础上做了扩展,可以使用 Spring MVC 的注解来完成Feign的功能。原生的 Feign 是不支持 Spring MVC 注解的,如果你想在 Spring Cloud 中使用原生的注解方式来定义客户端也是可以的,通过配置契约来改变这个配置,Spring Cloud 中默认的是 SpringMvcContract。

也就是说:通过契约配置,我们可以在 OpenFeign 中使用 Feign 的注解,那么该如何配置呢?

  • 可以通过 java 的方式
  • 也可以通过 .yml 配置文件方式

java方式 --> 修改契约配置

import feign.Contract;
import feign.Logger;
import org.springframework.context.annotation.Bean;/*** 全局配置:加了@Configuration注解表示全局配置,对所有服务起作用* 局部配置:不加@Configuration注解表示局部配置,只针对指定的一个服务起作用*/public class OpenFeignConfig {// 日志配置@Beanpublic Logger.Level feignLoggerLevel(){return Logger.Level.FULL;}// 契约配置@Beanpublic Contract feignContract(){return new Contract.Default();}
}
  • 在 OpenFeign 接口的@FeignClient注解中,通过configuration属性中指定 OpenFeign 的扩展配置类()
import com.cd.order8010.config.OpenFeignConfig;
import feign.RequestLine;
import org.springframework.cloud.openfeign.FeignClient;/*** 添加 Feign 接口和方法:* * name:指定调用rest接口所对应的服务名* * path:指定调用rest接口所在的StockController指定的RequestMapping的路径,如果StockController上没有RequestMapping,则不指定path属性* * configuration:指定OpenFeign接口的扩展*/
//@FeignClient(name = "stock-service", path = "/stock", configuration = OpenFeignConfig.class) //OpenFeign写法
@FeignClient(value = "stock-service", path = "/stock", configuration = OpenFeignConfig.class) //Feign写法
public interface StockFeignService {// 声明要调用的rest接口对应的方法//@RequestMapping("/reduce")@RequestLine("GET /reduce")public String reduce();}

.yml方式 --> 修改契约配置

feign:client:config:stock-service:  # 这里用default就是全局配置。如果是写服务名称(如:stock-service),则是针对某个微服务的配置,即局部配置contract: feign.Contract.Default # 设置成默认的契约(即将SpringMVC注解还原成feign原生注解)
import com.cd.order8010.config.OpenFeignConfig;
import feign.RequestLine;
import org.springframework.cloud.openfeign.FeignClient;/*** 添加 Feign 接口和方法:* * name:指定调用rest接口所对应的服务名* * path:指定调用rest接口所在的StockController指定的RequestMapping的路径,如果StockController上没有RequestMapping,则不指定path属性* * configuration:指定OpenFeign接口的扩展*/
//@FeignClient(name = "stock-service", path = "/stock")
@FeignClient(value = "stock-service", path = "/stock")
public interface StockFeignService {// 声明要调用的rest接口对应的方法//@RequestMapping("/reduce")@RequestLine("GET /reduce")public String reduce();}

Spring Cloud OpenFeign - - - > 契约配置相关推荐

  1. Spring Cloud OpenFeign使用教程

    文章目录 Spring Cloud OpenFeign Demo 怎么配置OpenFeignServer 怎么配置OpenFeignClient 多个参数传递问题 FeignClient的日志问题 多 ...

  2. spring cloud config将配置存储在数据库中

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! Spring Cloud Config Server最常见是将配置文件放在本地或者远程Git仓库, ...

  3. spring cloud config将配置存储在数据库中 1

    转载请标明出处: https://blog.csdn.net/forezp/... 本文出自方志朋的博客 Spring Cloud Config Server最常见是将配置文件放在本地或者远程Git仓 ...

  4. Spring Cloud Config的配置中心获取不到最新配置信息的问题

    本篇源于Spring Cloud Config的一个问题,但这个问题并非所有人都会遇到.如果您遇到了,那必须得看看这篇,如果没有遇到您也应该看看,防患于未然! 问题描述 之前有朋友提出Spring C ...

  5. Spring Cloud OpenFeign 接口反序列化失效,该怎么解决?

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/qq_34347620/article/ details/124295302 1. 关于 Spring Boot 无侵入式API ...

  6. spring cloud Eureka 之配置信息

    转载来源:http://blog.51cto.com/881206524/2117014 spring cloud Eureka 之配置信息 Eureka instance 一个服务,如:订单系统,会 ...

  7. 第十二章 Spring Cloud Config 统一配置中心详解

    目录 一.配置问题分析及解决方案 1.问题分析 2.解决方案 二.Spring Cloud Config 介绍 1.Spring Cloud Config特性 2.Spring Cloud Confi ...

  8. Spring Cloud OpenFeign 是什么?

    本文内容如有错误.不足之处,欢迎技术爱好者们一同探讨,在本文下面讨论区留言,感谢. 文章目录 简述 使用 依赖关系 结论 参考资料 简述 Spring Cloud OpenFeign 用于 Sprin ...

  9. 4、openFeign契约配置

    Spring Cloud 在 Feign 的基础上做了扩展,使用 Spring MVC 的注解来完成Feign的功能.原生的 Feign 是不支持 Spring MVC 注解的,如果你想在 Sprin ...

最新文章

  1. python怎么读_如何用Python读写文件
  2. dom操作表格示例(dom创建表格)
  3. 用C语言实现分治方法数组的排序,C语言实现分治法实例
  4. 我的控制反转,依赖注入和面向切面编程的理解
  5. 体验了一下用word 2007发表博客
  6. linux scp限制传输速度
  7. pythonrandom函数_python之random函数
  8. 世界范围内糖化血红蛋白报告的3种建议形式
  9. Spring+Struts集成(方案一)
  10. SpringBoot入门第一个简单示例
  11. 2003单网卡实现***,nat共享网络
  12. android调webview的方法,Android中的WebView详解
  13. Oralce 导入dpm 文件数据
  14. 搜索python代码的软件_python小说爬虫工具,小说搜索下载软件附源码
  15. appnode报错_appnode
  16. 一些常见监控服务如Nagios、Cacti和Zabbix的搭建
  17. 桌面创建html文件夹路径,HTML5+ - DirectoryEntry(文件夹及文件操作)
  18. debian9 使用cups远程管理打印服务
  19. ctfshow 做题 MISC入门 模块 21~30
  20. Unity 调用DLL

热门文章

  1. 【北京迅为iMX6ULL】嵌入式学习之Linux系统编程视频教程
  2. c语言100以内分解质因数,用C语言实现,将100以内的自然数分解质因数
  3. 把图片放大后还很清晰的办法
  4. 3.内网渗透之reGeorg+Proxifier
  5. AI大语音(八)——GMM-HMM声学模型(深度解析)
  6. 圣墟(圣墟最新章节,圣墟无弹窗全文阅读,圣墟无广告全文阅读)
  7. 【C++习题笔记】谭浩强C++程序设计(第三版)第七章
  8. 学WEB前端开发,自学还是培训靠谱
  9. 学习笔记:SKU组件(React版)
  10. iOS 12+ ReplayKit 系统录屏(一)