Spring Cloud OpenFeign - - - > 契约配置
项目源代码: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 - - - > 契约配置相关推荐
- Spring Cloud OpenFeign使用教程
文章目录 Spring Cloud OpenFeign Demo 怎么配置OpenFeignServer 怎么配置OpenFeignClient 多个参数传递问题 FeignClient的日志问题 多 ...
- spring cloud config将配置存储在数据库中
点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! Spring Cloud Config Server最常见是将配置文件放在本地或者远程Git仓库, ...
- spring cloud config将配置存储在数据库中 1
转载请标明出处: https://blog.csdn.net/forezp/... 本文出自方志朋的博客 Spring Cloud Config Server最常见是将配置文件放在本地或者远程Git仓 ...
- Spring Cloud Config的配置中心获取不到最新配置信息的问题
本篇源于Spring Cloud Config的一个问题,但这个问题并非所有人都会遇到.如果您遇到了,那必须得看看这篇,如果没有遇到您也应该看看,防患于未然! 问题描述 之前有朋友提出Spring C ...
- Spring Cloud OpenFeign 接口反序列化失效,该怎么解决?
点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/qq_34347620/article/ details/124295302 1. 关于 Spring Boot 无侵入式API ...
- spring cloud Eureka 之配置信息
转载来源:http://blog.51cto.com/881206524/2117014 spring cloud Eureka 之配置信息 Eureka instance 一个服务,如:订单系统,会 ...
- 第十二章 Spring Cloud Config 统一配置中心详解
目录 一.配置问题分析及解决方案 1.问题分析 2.解决方案 二.Spring Cloud Config 介绍 1.Spring Cloud Config特性 2.Spring Cloud Confi ...
- Spring Cloud OpenFeign 是什么?
本文内容如有错误.不足之处,欢迎技术爱好者们一同探讨,在本文下面讨论区留言,感谢. 文章目录 简述 使用 依赖关系 结论 参考资料 简述 Spring Cloud OpenFeign 用于 Sprin ...
- 4、openFeign契约配置
Spring Cloud 在 Feign 的基础上做了扩展,使用 Spring MVC 的注解来完成Feign的功能.原生的 Feign 是不支持 Spring MVC 注解的,如果你想在 Sprin ...
最新文章
- python怎么读_如何用Python读写文件
- dom操作表格示例(dom创建表格)
- 用C语言实现分治方法数组的排序,C语言实现分治法实例
- 我的控制反转,依赖注入和面向切面编程的理解
- 体验了一下用word 2007发表博客
- linux scp限制传输速度
- pythonrandom函数_python之random函数
- 世界范围内糖化血红蛋白报告的3种建议形式
- Spring+Struts集成(方案一)
- SpringBoot入门第一个简单示例
- 2003单网卡实现***,nat共享网络
- android调webview的方法,Android中的WebView详解
- Oralce 导入dpm 文件数据
- 搜索python代码的软件_python小说爬虫工具,小说搜索下载软件附源码
- appnode报错_appnode
- 一些常见监控服务如Nagios、Cacti和Zabbix的搭建
- 桌面创建html文件夹路径,HTML5+ - DirectoryEntry(文件夹及文件操作)
- debian9 使用cups远程管理打印服务
- ctfshow 做题 MISC入门 模块 21~30
- Unity 调用DLL
热门文章
- 【北京迅为iMX6ULL】嵌入式学习之Linux系统编程视频教程
- c语言100以内分解质因数,用C语言实现,将100以内的自然数分解质因数
- 把图片放大后还很清晰的办法
- 3.内网渗透之reGeorg+Proxifier
- AI大语音(八)——GMM-HMM声学模型(深度解析)
- 圣墟(圣墟最新章节,圣墟无弹窗全文阅读,圣墟无广告全文阅读)
- 【C++习题笔记】谭浩强C++程序设计(第三版)第七章
- 学WEB前端开发,自学还是培训靠谱
- 学习笔记:SKU组件(React版)
- iOS 12+ ReplayKit 系统录屏(一)