SpringCloud学习笔记(10)----Spring Cloud Netflix之声明式 REST客户端 -Feign的高级特性
1. Feign的默认配置
Feign 的默认配置 Spring Cloud Netflix 提供的默认实现类:FeignClientsConfiguration
解码器:Decoder feignDecoder: ResponseEntityDecoder (which wraps a SpringDecoder)
编码器:Encoder feignEncoder: SpringEncoder
日志框架:Logger feignLogger: Slf4jLogger
契约:Contract feignContract: SpringMvcContract
生成器:Feign.Builder feignBuilder: HystrixFeign.Builder
说明:
解码器的作用:将 HTTP 响应数据反序列化为 Java 对象
编码器的作用:将方法签名中方法参数对象序列化为请求参数放到 HTTP 请求中
2. 自定义配置
import org.springframework.context.annotation.Bean; import feign.Contract;
import feign.Logger; //@Configuration
public class RcFeignConfiguration {
@Bean
public Logger.Level feignLoggerLevel() {
return feign.Logger.Level.FULL;
} /*@Bean
public Contract feignContract() {
return new feign.Contract.Default();
}*/
}
配置@ FeignClient注解
@FeignClient(value = "spring-cloud-provider", configuration = RcFeignConfiguration.class)
说明:若配置文件被 SpringContext 扫描,则会被@ FeignClien 共用,会覆盖。
3. 日志配置
# 日志配置,默认是不打印任何的日志
logging.level.com.drunck.education.feign.IUserBiz=debug
需要在配置类里面添加以下代码:
@Bean
public Logger.Level feignLoggerLevel() {
return feign.Logger.Level.FULL;
}
说明:四种级别
NONE:默认,不打印任何日志
BASIC:打印请求方法和 URL,和请求返回状态码和执行时间。
HEADERS:打印请求和返回的头部信息。
FULL:打印以上的全部信息。
4. 契约配置
在配置类里面添加以下代码
@Bean
public Contract feignContract() {
return new feign.Contract.Default();
}
修改 IuserBiz 类
@RequestLine("GET /api/user/{id}")
String view1(@Param(value = "id") int id);
5. 支持压缩
# 开启压缩
feign.compression.request.enabled=true
feign.compression.response.enabled=true
# 更多配置
feign.compression.request.mime-types=text/xml,application/xml,application/json
feign.compression.request.min-request-size=2048
6. URL属性
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; /**
* @author
*/
@FeignClient(value = "baidu", url = "www.baidu.com")
public interface IdrunckBiz {
@RequestMapping(value = "/{url}", method = RequestMethod.GET)
String get(@PathVariable(name = "url") String url); }
说明:定义了 url 之后,vaule 为必选值,这时的 value 只是一个标识。
7. 支持继承
1、定义一个普通接口
public interface UserService {
@RequestMapping(method = RequestMethod.GET, value = "/api/user/find/{id}")
User find(@PathVariable(value = "id") int id);
}
2 、实现接口
import java.util.Date; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
/**
* @author*/
@RestController
public class FeignApiUserController implements UserService { protected final Logger logger = LoggerFactory.getLogger(this.getClass()); @Override public User find(@PathVariable int id) { User user = new User(); user.setId(id); user.setName("张三"); user.setCreateTime(new Date()); logger.info("请求接口返回:{}", user); return user; }
}
说明:springmvc 里面不支持方法参数映射的继承
3、继承
public interface IUserBiz extends UserService{
// …
}
SpringCloud学习笔记(10)----Spring Cloud Netflix之声明式 REST客户端 -Feign的高级特性的更多相关文章
- SpringCloud学习笔记(9)----Spring Cloud Netflix之声明式 REST客户端 -Feign的使用
1. 什么是Feign? Feign是一种声明式.模板化的HTTP客户端,在SpringCloud中使用Feign.可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到 ...
- 3.【Spring Cloud Alibaba】声明式HTTP客户端-Feign
使用Feign实现远程HTTP调用 什么是Feign Feign是Netflix开源的声明式HTTP客户端 GitHub地址:https://github.com/openfeign/feign 实现 ...
- Spring 源码学习笔记10——Spring AOP
Spring 源码学习笔记10--Spring AOP 参考书籍<Spring技术内幕>Spring AOP的实现章节 书有点老,但是里面一些概念还是总结比较到位 源码基于Spring-a ...
- Spring Cloud 入门教程(六): 用声明式REST客户端Feign调用远端HTTP服务
首先简单解释一下什么是声明式实现? 要做一件事, 需要知道三个要素,where, what, how.即在哪里( where)用什么办法(how)做什么(what).什么时候做(when)我们纳入ho ...
- spring cloud 声明式rest客户端feign调用远程http服务
在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端.Feign就是Spring Cloud提供的一种声明式R ...
- springCloud学习-消息总线(Spring Cloud Bus)
1.简介 Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控.本文要讲述的是用Spring Cloud Bus实现 ...
- Spring Cloud(三):声明式调用
声明式服务调用 前面在使用spring cloud时,通常都会利用它对RestTemplate的请求拦截来实现对依赖服务的接口调用,RestTemplate实现了对http的请求封装处理,形成了一套模 ...
- Spring Cloud探路(三)REST 客户端Feign
Declarative REST Client: Feign Feign is a declarative web service client. It makes writing web servi ...
- Spring4.0学习笔记(10) —— Spring AOP
个人理解: Spring AOP 与Struts 的 Interceptor 拦截器 有着一样的实现原理,即通过动态代理的方式,将目标对象与执行对象结合起来,降低代码之间的耦合度,主要运用了Proxy ...
随机推荐
- 详解循环神经网络(Recurrent Neural Network)
本文结构: 模型 训练算法 基于 RNN 的语言模型例子 代码实现 1. 模型 和全连接网络的区别 更细致到向量级的连接图 为什么循环神经网络可以往前看任意多个输入值 循环神经网络种类繁多,今天只看最 ...
- PHP魔术方法__tostring()篇
下面是关于__tostring 的运用 header('Content-type:text/html;charset="utf-8"'); /*存在内置方法_tostring()的 ...
- Linux部署之NFS方式安装系统
1. 让客户端从网络启动并且选择第二项 2. 选择语言 3. 选择键盘布局 4. 选择安装方式为NFS 5. ...
- ABBYY FineReader去他的光棍节,我要我的双十一
今天就是双十一,全民剁手的双十一,一年仅一次的双十一,不只是半价的双十一.....此时此刻,多少钱拿起手机在疯狂购物,又有多少人死守着电脑,不敢怠慢一丁点机会,买着买着购物车就空了,然后才发现,咦!超 ...
- Web API Filter
在Web Api中,有三种Filter Filter类型 实现的接口 描述 Authorization IAuthorizationFilter 最先运行的Filter,被用作请求权限校验 Actio ...
- make 编译 linux 内核是单线程的任务 才用-j4命令使用4 线程加速
今天使用 make 编译 linux 内核,发现CPU只用了30%多一点,而我的电脑是4核的,所以如果没有意外的话,make 编译 linux 内核的任务是用单线程做的. 又了解到,使用-j4参数可以 ...
- jupyter的安装
3.6:\Lib\site-packages\pip\models\index.py # PyPI = Index('https://pypi.python.org/') # 替换成 PyPI = I ...
- laravel save() 返回 null
原因:引用其他方法时,没有 return save()的操作结果. 在使用save()方法时,发现返回值是:null:
- Node.js 指南(迁移到安全的Buffer构造函数)
迁移到安全的Buffer构造函数 移植到Buffer.from()/Buffer.alloc() API. 概述 本指南介绍了如何迁移到安全的Buffer构造函数方法,迁移修复了以下弃用警告: 由于安 ...
- qt 透明化方法汇总
一. QT 透明设置 背景,标题栏透明,下级Widget,painter绘出来的(比如,drawtext,drawline)不透明 QWidget window; window.setWindowFl ...