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的高级特性的更多相关文章

  1. SpringCloud学习笔记(9)----Spring Cloud Netflix之声明式 REST客户端 -Feign的使用

    1. 什么是Feign? Feign是一种声明式.模板化的HTTP客户端,在SpringCloud中使用Feign.可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到 ...

  2. 3.【Spring Cloud Alibaba】声明式HTTP客户端-Feign

    使用Feign实现远程HTTP调用 什么是Feign Feign是Netflix开源的声明式HTTP客户端 GitHub地址:https://github.com/openfeign/feign 实现 ...

  3. Spring 源码学习笔记10——Spring AOP

    Spring 源码学习笔记10--Spring AOP 参考书籍<Spring技术内幕>Spring AOP的实现章节 书有点老,但是里面一些概念还是总结比较到位 源码基于Spring-a ...

  4. Spring Cloud 入门教程(六): 用声明式REST客户端Feign调用远端HTTP服务

    首先简单解释一下什么是声明式实现? 要做一件事, 需要知道三个要素,where, what, how.即在哪里( where)用什么办法(how)做什么(what).什么时候做(when)我们纳入ho ...

  5. spring cloud 声明式rest客户端feign调用远程http服务

    在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端.Feign就是Spring Cloud提供的一种声明式R ...

  6. springCloud学习-消息总线(Spring Cloud Bus)

    1.简介 Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控.本文要讲述的是用Spring Cloud Bus实现 ...

  7. Spring Cloud(三):声明式调用

    声明式服务调用 前面在使用spring cloud时,通常都会利用它对RestTemplate的请求拦截来实现对依赖服务的接口调用,RestTemplate实现了对http的请求封装处理,形成了一套模 ...

  8. Spring Cloud探路(三)REST 客户端Feign

    Declarative REST Client: Feign Feign is a declarative web service client. It makes writing web servi ...

  9. Spring4.0学习笔记(10) —— Spring AOP

    个人理解: Spring AOP 与Struts 的 Interceptor 拦截器 有着一样的实现原理,即通过动态代理的方式,将目标对象与执行对象结合起来,降低代码之间的耦合度,主要运用了Proxy ...

随机推荐

  1. jquery应用实例1:手风琴特效

    效果: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  2. elasticsearch集群安全重启节点

    es2.x 关闭集群的动态分片:(动态分片开启状态如果节点宕机了,会导致集群重新分配数据进行数据转移,会导致节点直接大量传输数据)curl -XPUT 'http://192.168.248.193: ...

  3. 如何在使用layer.prompt在输入值为空的情况下点击确定继续执行逻辑?

    突然发现在使用LayUI时,用到弹出层layer.prompt时,如果文本框输入值是空的话点击确定没有反应,不能向下执行. 但是我又需要在这种情况下去继续执行判断或逻辑时该怎么做?? 示例:原代码如下 ...

  4. C# 基础复习 三 XML操作

    XML 可扩展标记语言(所有标签都是自己定义,没有固定格式) 如果要给XML规定格式,可以使用dtd (dtd是什么?你不会自己百度吗) XML主要用来存储数据 XML的要求:     根节点只能有一 ...

  5. HDU1061 - Rightmost Digit

    Given a positive integer N, you should output the most right digit of N^N. Input The input contains ...

  6. splay 文艺平衡树 (数据结构)

    题目大意:略 splay维护区间翻转裸题,为了减少不必要的麻烦,多插入两个点,分别是0和n+1 每次找区间的第K个值,就在splay上二分即可 顺便学了一下splay的完美建树,而且splay有一些小 ...

  7. python 面向对象 类的内置方法

    判断是不是类cls的对象 class A: pass a = A() print(isinstance(a,A)) 判断类sub是不是super的子类 class A: pass class B(A) ...

  8. 2019-03-18 OpenCV Tesseract-OCR 下载 安装 配置(cv2 报错)

    OpenCV 下载 安装 配置 1.下载和Python版本对应的版本,此为下载地址 2.安装(在powershell管理员模式下安装) pip3 install .\opencv_python-3.4 ...

  9. 关于Vue实例的生命周期(2)

     关于Vue实例的生命周期(2) 创建(create)->挂载(mount)->更新(update)->销毁(destory) 钩子函数触发事件 beforeCreate 在实例初始 ...

  10. (转载)maven profile多环境自动切换配置

    原文:https://www.cnblogs.com/adeng/p/7059588.html 痛点: 在java开发的过程中,我们经常要面对各种各样的环境,比如开发环境,测试环境,正式环境,而这些环 ...