Feign的使用

Feign采用了声明式的API接口的风格,将Java Http客户端绑定到它的内部,从而调用过程变的简单。

配置文件:

spring:
application:
name: eureka-feign-client
server:
port: 8765
eureka:
client:
service-url:
defaultZone: http://localhost:9001/eureka/

启动类:

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class DemoApplication { public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}

Feign Config:

@Configuration
public class FeignConfig {
@Bean
public Retryer feignRetryer() {
return new Retryer.Default(100, SECONDS.toMillis(1), 5);
}
}

实现Feign Client接口:

@FeignClient(value = "hi-service", configuration = FeignConfig.class)
public interface
EurekaClientFeign { @GetMapping(value = "/hi")
String sayHiFromClientEureka(@RequestParam(value = "name") String name); }

经过这几个步骤后,就可以完成Feign对Eureka服务的调用了。

FeignClient的配置

默认的配置类为FeignClientsConfiguration,这个类注入了很多Feign相关的配置Bean,包括FeignRetryer.FeignLoggerFactory和FormattingConversionService等。

另外Decoder、Encoder和Contract这三个类没有Bean注入的情况下,会自动注入默认配置Bean,即ResponseEntityDecoder、SpringEncoder和SpringMvcContract。

我们可以重写FeignClientsConfiguration中的Bean,覆盖默认的配置Bean,从而达到自定义配置的目的。

Feign中使用HttpClent和OkHttp

Feign默认使用HttpUrlConnection来实现网络请求,但它还支持其他网络请求框架。只要pom.xml配置上feign-okhttp或者feign-httpclinet的依赖,然后配置文件上配置feign.httpclient.enabled或者feign.okhttp.enabled为true就可以启用了。

总结

1、@EnableFeignClients注解开启FeignClient功能。只有这个注解存在,程序才会开启对@FeignClient注解的包扫描

2、更具Feign的规则实现接口,并在接口上面加@FeignClient注解

3、程序启动后,扫描所有的@FeignClient的注解的类,并将这些信息注入到IOC容器

4、当接口被调用时,通过JDK代理生成巨日的RequestTemplate模板对象

5、根据RequestTemplate生成Http请求的Request对象

6、Request对象交给Client(HttpUrlConnection/HttpClient/OkHttp)处理

7、最后Client被封装到LoadBalanceClient中,结合Ribbon做负载均衡

微服务深入浅出(5)-- 声明式调用Feign的更多相关文章

  1. spring cloud深入学习(四)-----eureka源码解析、ribbon解析、声明式调用feign

    基本概念 1.Registe 一一服务注册当eureka Client向Eureka Server注册时,Eureka Client提供自身的元数据,比如IP地址.端口.运行状况指标的Uri.主页地址 ...

  2. SpringCloud学习笔记:声明式调用Feign(4)

    1. Feign简介 Feign采用声明式API接口的风格,将Java HTTP客户端绑定到它的内部. Feign的首要目标是简化Java HTTP客户端调用过程. 2.Feign客户端示例 Feig ...

  3. spring boot 2.0.3+spring cloud (Finchley)3、声明式调用Feign

    Feign受Retrofix.JAXRS-2.0和WebSocket影响,采用了声明式API接口的风格,将Java Http客户端绑定到他的内部.Feign的首要目标是将Java Http客户端调用过 ...

  4. Spring Cloud声明式调用Feign负载均衡FeignClient详解

    为了深入理解Feign,下面将从源码的角度来讲解Feign.首先来看看FeignClient注解@FeignClient的源码,代码如下: FeignClient注解被@Target(ElementT ...

  5. spring cloud微服务快速教程之(三)声明式访问Feign、负载均衡Ribbon

    0-前言 eureka实际上已经集成了负载均衡调度框架Ribbon: 我们有了各个微服务了,那怎么来调用他们呢,一种方法是可以使用 RestTemplate(如:String str= restTem ...

  6. Spring Cloud 入门Eureka -Consumer服务消费(声明式Feign)(三)

    Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端.它使得编写Web服务客户端变得更加简单.我们只需要通过创建接口并用注解来配置它既可完成对Web服务接 ...

  7. 032 搭建搜索微服务01----向ElasticSearch中导入数据--通过Feign实现微服务之间的相互调用

    1.创建搜索服务 创建module: Pom文件: <?xml version="1.0" encoding="UTF-8"?> <proje ...

  8. SpringCloud微服务实战二:Spring Cloud Ribbon 负载均衡 + Spring Cloud Feign 声明式调用

    1.Spring Cloud Ribbon的作用 Ribbon是Netflix开发的一个负载均衡组件,它在服务体系中起着重要作用,Pivotal将其整合成为Spring Cloud Ribbon,与其 ...

  9. 微服务实战SpringCloud之Spring Cloud Feign替代HTTP Client

    简介 在项目中我们有时候需要调用第三方的API,微服务架构中这种情况则更是无法避免--各个微服务之间通信.比如一般的项目中,有时候我们会使用 HTTP Client 发送 HTTP 请求来进行调用,而 ...

随机推荐

  1. JS单例模式在工作中的使用

    为了尽可能的减少全局变量的污染,在写js的时候可以采用单例模式,形式如下: 比如有一个js叫demo.js,那么我们可以在js里这样写: var demo = {} 这样做的目的是将整个js当成一个对 ...

  2. linux 下安装 nodejs

    1. linux 下下载 wget http://cdn.npm.taobao.org/dist/node/v10.14.1/node-v10.14.1-linux-x64.tar.xz 2. 解压缩 ...

  3. Windows系统下Log4Net+FileBeat+ELK日志分析系统问题总结

    问题如下:1.FileBeat日志报 "dial tcp 127.0.0.1:5544: connectex: No connection could be made because the ...

  4. html实现鼠标悬停变成手型实现方式

    1.采用a标签实现的方式 <a href="javascript:void()">内容</a> 2.采用CSS实现的方式 // 变手形 oElement.s ...

  5. java传统的文件拷贝 相当于两个大缸需要通过一个勺子(字节数组)一点一点运过去

  6. 转载manifold learning一篇

    我恨自己不干活儿,不过也没辙. 早晚要学习流形的,今天先转一篇文章,以后找不到就尿了. 我真羡慕数学系的人,╮(╯▽╰)╭. 发信人: Kordan (K&M), 信区: AI标  题: do ...

  7. 主机 & 虚拟机 & 开发板 三者的恩爱情仇

    # 主机 & 虚拟机 & 开发板 > 三者网络连通性,使用ping命令检测 @ Bridge 模式 ## 主机 & 虚拟机 主机与虚拟机相当于一个网络里的两台主机,都有各 ...

  8. nth-of-type和nth-child

    一.nth-of-type.nth-child :nth-of-type(n) 选择器匹配属于父元素的特定类型的第 N 个子元素的每个元素. :nth-child(n) 选择器匹配属于其父元素的第 N ...

  9. 【线段树分治】【P5227】 [AHOI2013]连通图

    Description 给定一个无向连通图和若干个小集合,每个小集合包含一些边,对于每个集合,你需要确定将集合中的边删掉后改图是否保持联通.集合间的询问相互独立 定义一个图为联通的当且仅当对于任意的两 ...

  10. 用ladon框架封装Python为Webservice接口以及调用接口的方法

    一.用ladon框架封装Python为Webservice接口 功能实现的同时,希望将接口开放给别人,而封装python接口的一个再简单不过的框架Ladon,而且提供不同的协议,包括SOAP和Json ...