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. SQL的where执行顺序

    SQL的where执行顺序 1 mysql 从左到右. 一个原则,排除越多的条件放到第一个 例子:抄的. SELECT … WHERE p.languages_id = 1 AND m.languag ...

  2. Redis安装到Windows系统

    redis官方没有windows版本,在windows下安装需要单独去找.地址:https://github.com/MSOpenTech/redis/releases.本文用的是Redis-x64- ...

  3. 基于vue项目的js工具方法汇总

    以下是个人过去一年在vue项目的开发过程中经常会用到的一些公共方法,在此进行汇总,方便以后及有需要的朋友查看~ let util = {}; /** * @description 日期格式化 * @p ...

  4. Kattis - Speed Limit

    Speed Limit Bill and Ted are taking a road trip. But the odometer in their car is broken, so they do ...

  5. 路飞学城Python-Day23

    1.计算机基础 Python可以实现各种应用软件,类比word.QQ.爱奇艺等,但是应用这些软件需要计算机硬件, 计算机发展的过程就是人类不断的希望机器去取代人力,解放更多的人力,最终极的理想就是完全 ...

  6. css——overflow

    Overflow:属性规定当前内容溢出元素框时发生的事情 1.当内容过多,元素框溢出 1)hidden:隐藏超出部分(overflow: hidden;) 2)auto:有下拉滚动条(overflow ...

  7. web前端开发技术栈分析图

  8. STM32利用TIM3产生一个1--100Hz可调频率

    目标:利用TIM3结合普通GPIO实现一个1--100HZ的可控频率,误差在0.5HZ以内 核心:要实现该功能首先要明确频率的定义,频率就是1秒内发生周期性变化的次数,例如一个正弦波,1S内,走了15 ...

  9. jvm 堆、栈 、方法区概念和联系

    一.三者联系 1.堆:解决数据的存储问题( 即 数据怎么放,放到哪 ). 2.栈:解决程序运行的问题( 即 程序如何执行,或者说如何处理数据 ). 3.方法区:辅助堆栈的一块永久区,解决堆栈信息的产生 ...

  10. 2015 Multi-University Training Contest 1 hdu 5296 Annoying problem

    Annoying problem Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...