微服务深入浅出(5)-- 声明式调用Feign
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的更多相关文章
- spring cloud深入学习(四)-----eureka源码解析、ribbon解析、声明式调用feign
基本概念 1.Registe 一一服务注册当eureka Client向Eureka Server注册时,Eureka Client提供自身的元数据,比如IP地址.端口.运行状况指标的Uri.主页地址 ...
- SpringCloud学习笔记:声明式调用Feign(4)
1. Feign简介 Feign采用声明式API接口的风格,将Java HTTP客户端绑定到它的内部. Feign的首要目标是简化Java HTTP客户端调用过程. 2.Feign客户端示例 Feig ...
- spring boot 2.0.3+spring cloud (Finchley)3、声明式调用Feign
Feign受Retrofix.JAXRS-2.0和WebSocket影响,采用了声明式API接口的风格,将Java Http客户端绑定到他的内部.Feign的首要目标是将Java Http客户端调用过 ...
- Spring Cloud声明式调用Feign负载均衡FeignClient详解
为了深入理解Feign,下面将从源码的角度来讲解Feign.首先来看看FeignClient注解@FeignClient的源码,代码如下: FeignClient注解被@Target(ElementT ...
- spring cloud微服务快速教程之(三)声明式访问Feign、负载均衡Ribbon
0-前言 eureka实际上已经集成了负载均衡调度框架Ribbon: 我们有了各个微服务了,那怎么来调用他们呢,一种方法是可以使用 RestTemplate(如:String str= restTem ...
- Spring Cloud 入门Eureka -Consumer服务消费(声明式Feign)(三)
Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端.它使得编写Web服务客户端变得更加简单.我们只需要通过创建接口并用注解来配置它既可完成对Web服务接 ...
- 032 搭建搜索微服务01----向ElasticSearch中导入数据--通过Feign实现微服务之间的相互调用
1.创建搜索服务 创建module: Pom文件: <?xml version="1.0" encoding="UTF-8"?> <proje ...
- SpringCloud微服务实战二:Spring Cloud Ribbon 负载均衡 + Spring Cloud Feign 声明式调用
1.Spring Cloud Ribbon的作用 Ribbon是Netflix开发的一个负载均衡组件,它在服务体系中起着重要作用,Pivotal将其整合成为Spring Cloud Ribbon,与其 ...
- 微服务实战SpringCloud之Spring Cloud Feign替代HTTP Client
简介 在项目中我们有时候需要调用第三方的API,微服务架构中这种情况则更是无法避免--各个微服务之间通信.比如一般的项目中,有时候我们会使用 HTTP Client 发送 HTTP 请求来进行调用,而 ...
随机推荐
- paperOne基于java web的简易四则运算出题网站
项目成员:张金生 张政 需求概要 1.运算数均为正整数 2.包含的运算符有+,-,*,/ 3.除法运算结果为整除运算 4.批量生成题目并判题 核心功能分析 1.题目生成——java后端 题目生 ...
- 通达OA工作流主要表的数据结构
flow_run_prcs 流程执行明细 字段名称 类型 中文 说明 RUN_ID 数值 流水号(关键字段) 每发起一个工作流,即创建一个全局唯一的流水号 PRCS_ID 数值 执行步骤序号 USER ...
- Windows下获取文件的md5码的方法
1.certutil 命令简介 本来想找一个工具 算一个文件的md5 或者是sha 值来着. 找到一个说法是 可以使用 windows 自带的命令行来处理 具体命令 certutil -hashfil ...
- object & over-write
object & over-write
- .net core2.0入门使用EF
使用Nuget导入所需要的EF 核心包以及对应数据库的驱动包,我用的是sqlserver(.net 支持的所有数据库) Install-Package Microsoft.EntityFramewor ...
- YARN的重启动问题:RM Restart/RM HA/Timeline Server/NM Restart
ResourceManger Restart ResourceManager负责资源管理和应用的调度,是YARN的核心组件,有可能存在单点失败的问题.ResourceManager Restart是使 ...
- 如何认识TOS----DSCP 对照表
如何认识TOS----DSCP 对照表 最近有遇到项目中对FortiGate设置TOS的策略路由的问题,其实这问题较为简单,但是由于大家对TOS-DSCP概念不熟悉造成的,所以感觉比较难,现在不同厂商 ...
- 迭代解析JSON简单实例
由于项目中遇到了这个问题,所以在这里记录一下. 比如:请求到的JSON串: { "msg":"数据获取成功", "success":true ...
- 【poj3375】 Network Connection
http://poj.org/problem?id=3375 (题目链接) 题意 有$M$个网络接口和$N$台计算机,给出它们的坐标(在同一直线上),一个接口只能接一台计算机,费用为两坐标之差的绝对值 ...
- wget递归下载整站
由于线上跑的系统还有CentOS5.4.6.4.6.5.6.5.6.6.6.8,而各镜像站维护的最早的版本已经是6.9,所以需要爬archive站点的rpm包来自建yum仓库. # wget -r - ...