HTTP客户端Fegin
HTTP客户端Fegin
- RestTemplet 方式调用存在的问题
- Fegin 简介
- 基于fegin的远程调用
- 定义和使用fegin的客户端
- 自定义fegin的配置
- Fegin的优化
- Fegin 实践
RestTemplet 方式调用存在的问题
先看代码
String url="http://userservice/user/"+ order.getUserId();User user = template.getForObject(url, User.class);
存在以下问题
代码可读性差,编程体验不统一
参数复杂url难以维护
引出了我们的fegin
Fegin 简介
通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我们还可以忍受,一旦有多个参数的话,这时拼接请求字符串就会效率低下
而Feign则会完全代理HTTP请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。Feign整合了Ribbon和Hystrix,可以让我们不再需要显式地使用这两个组件。
Feign具有如下特性:
支持可插拔的HTTP编码器和解码器;
支持Hystrix和它的Fallback;
支持Ribbon的负载均衡;
支持HTTP请求和响应的压缩
基于fegin的远程调用
定义和使用fegin的客户端
1.引入依赖,调用端引入
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
2.添加注解 @EnableFeignClients
@MapperScan("com.jng.mapper")
@SpringBootApplication
@EnableFeignClients
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}}
3.在调用声明远程调用)
@FeignClient("userservice")
public interface UserClient {
// String url="http://userservice/user/"+ order.getUserId();
// User user = template.getForObject(url, User.class);@GetMapping("/user/{id}")User findById(@PathVariable("id") Long id);
}
自定义fegin的配置
配置级别
none(默认)–>BASIC–>HEADERS–>FULL
1.yaml配置方式
feign:client:config:default: # 如果是default是默认代表全局的,是服务名称就是代表当前服务loggerLevel: FULL
2.注解方式
public class FeginClientConfig {@Beanpublic Logger.Level level(){return Logger.Level.BASIC;}
}
@FeignClient(value = "userservice",configuration = FeginClientConfig.class) //这个方式是针对单个微服务的
public interface UserClient {
// String url="http://userservice/user/"+ order.getUserId();
// User user = template.getForObject(url, User.class);@GetMapping("/user/{id}")User findById(@PathVariable("id") Long id);
}
@MapperScan("com.jng.mapper")
@SpringBootApplication
@EnableFeignClients(defaultConfiguration= FeginClientConfig.class) //针对全局有效
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}
总结
Fegin的优化
1.日志级别最好使用BASIC或者默认的,不使用FULL
2.使用httpclient或者okrhttp代替URLconnection
<!--httpClient的依赖 --><dependency><groupId>io.github.openfeign</groupId><artifactId>feign-httpclient</artifactId></dependency>
yml(可以不用配置默认是打开,但是其他配置还是要自己配置,最好加上)
feign:httpclient:enabled: true #支持httpclient的开关max-connections: 200max-connections-per-route: 50
Fegin 实践
HTTP客户端Fegin相关推荐
- 微服务架构搭建(JAVA)
一:基础方面 1.javaSE基础语法和javaEE面向对象高级进阶,点击学习JAVA基础 2.熟悉常用的数据库mysql.sqlserver.oracle等,熟练应用各种连接关联查询 3.熟悉目前流 ...
- 一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go
在做RabbitCloud(之前是一个RPC,现在是一个微服务框架)的时候往往避不开客户端代理,之前把这些客户端代理都算作服务框架不可缺少的一部分,随着后期的深入发现这些客户端代理其实可以互通,类似s ...
- 简单使用SpringCloud的fegin和熔断hystrix
2019独角兽企业重金招聘Python工程师标准>>> SpringCloud中fegin的使用是非常优雅的,被大多数面向接口编程的程序员喜欢,而且熔断(hystrix)则能在服务不 ...
- Fegin拦截器解决各微服务之间数据下沉
上篇说了当前端访问微服务网关,借助ZuulFilter过滤器来过滤所有请求,获取request,判断cookie是否有身份短令牌,request的header中是否有Jwt令牌,redis中是否有Jw ...
- feign踩坑_spring cloud fegin踩坑记录
1:多客户端时,fegin接口抽取到公共jar中,此时,客户端的启动类上需要对该jar中fegin所在的包进行扫描,要在spring和fegin中同时注册,否则启动时会报:"Consider ...
- 实现Fegin远程调用
Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign 而且Feign默认集成了Ribbon,所以使用Feign默认就实现了负载均衡的效 ...
- Spring Cloud Fegin 和 Eurake 简单使用
Spring Cloud Fegin 和 Eurake 简单使用 Eurake注册中心 gradle中的依赖 dependencies {implementation 'org.springframe ...
- SpringCloud工程搭建之Fegin为消费者提供封装(可选)
七.Fegin为消费者提供封装(可选) 完整工程源码:https://gitee.com/forwardxiang/spring-cloud-demo.git 7.1 导入依赖 在消费者原有的依赖基础 ...
- Fegin的基本调用
文章目录 1.介绍 2.使用 2.1. 面向接口编程,配置@FeginClien注解的接口 2.2.导入pom依赖 2.3.开启Feign配置,扫描@FeginClient注解: 3.更新包 4.排除 ...
最新文章
- Android程序完全退出的三种方法
- 一些数字:全球企业的人工智能应用进展
- 长方形纸做容积最大的长方体_A4纸的尺寸是怎么来的?
- python条件语句-Python3 条件控制
- CTFshow 命令执行 web57
- ABAP中的F4帮助怎么用?
- ICCV 2019 运行LCGN遇到的问题及解决办法
- Python学习笔记一:数据类型转换
- 掌握Java 11的Constantdynamic
- jsp文字上下居中显示_如何让任务栏完全透明,图标居中
- selenium测试(Java)-- 显式等待(九)
- Java 程序设计基础知识
- 计算机模块中的画板英文,电脑中将画板导入Mockingbot的方法
- 规范化理论:候选键的求解理论和算法
- The project uses Gradle 4.1 which is incompatible with Java 11 or newer.
- logback日志配置说明
- Python 贪心法:真分数表示为埃及分数之和
- tableau-瀑布图
- 新站如何做SEO及注意事项
- 驯服烂代码_驯服老虎,收藏框架
热门文章
- 设计模式 -- 享元模式(Flyweight Pattern)
- 打开网页状态栏不见了
- 方便无阻且全面的python程序exe反编译,可以不使用十六进制编辑器完成的常规反编操作
- Photoshop cc 2015 导出web所用格式提示错误 无法完成该操作怎么办?用这个方法轻松解决!
- 记一次Mac上launchctl引发的问题
- okhttp3-拦截器
- 单片机技术与c语言编程教学大纲,单片机应用技术(C语言)教学大纲.doc
- 突发!泽宝原创始人被母公司星徽精密追讨10亿元-跨境知道
- android项目实战-人脸识别接口应用
- bl系列刀片(blade)服务器,产品技术-HPE Integrity BL870c i6 刀片动能服务器-新华三集团-H3C...