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是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单。Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。

而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相关推荐

  1. 微服务架构搭建(JAVA)

    一:基础方面 1.javaSE基础语法和javaEE面向对象高级进阶,点击学习JAVA基础 2.熟悉常用的数据库mysql.sqlserver.oracle等,熟练应用各种连接关联查询 3.熟悉目前流 ...

  2. 一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go

    在做RabbitCloud(之前是一个RPC,现在是一个微服务框架)的时候往往避不开客户端代理,之前把这些客户端代理都算作服务框架不可缺少的一部分,随着后期的深入发现这些客户端代理其实可以互通,类似s ...

  3. 简单使用SpringCloud的fegin和熔断hystrix

    2019独角兽企业重金招聘Python工程师标准>>> SpringCloud中fegin的使用是非常优雅的,被大多数面向接口编程的程序员喜欢,而且熔断(hystrix)则能在服务不 ...

  4. Fegin拦截器解决各微服务之间数据下沉

    上篇说了当前端访问微服务网关,借助ZuulFilter过滤器来过滤所有请求,获取request,判断cookie是否有身份短令牌,request的header中是否有Jwt令牌,redis中是否有Jw ...

  5. feign踩坑_spring cloud fegin踩坑记录

    1:多客户端时,fegin接口抽取到公共jar中,此时,客户端的启动类上需要对该jar中fegin所在的包进行扫描,要在spring和fegin中同时注册,否则启动时会报:"Consider ...

  6. 实现Fegin远程调用

    Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign 而且Feign默认集成了Ribbon,所以使用Feign默认就实现了负载均衡的效 ...

  7. Spring Cloud Fegin 和 Eurake 简单使用

    Spring Cloud Fegin 和 Eurake 简单使用 Eurake注册中心 gradle中的依赖 dependencies {implementation 'org.springframe ...

  8. SpringCloud工程搭建之Fegin为消费者提供封装(可选)

    七.Fegin为消费者提供封装(可选) 完整工程源码:https://gitee.com/forwardxiang/spring-cloud-demo.git 7.1 导入依赖 在消费者原有的依赖基础 ...

  9. Fegin的基本调用

    文章目录 1.介绍 2.使用 2.1. 面向接口编程,配置@FeginClien注解的接口 2.2.导入pom依赖 2.3.开启Feign配置,扫描@FeginClient注解: 3.更新包 4.排除 ...

最新文章

  1. Android程序完全退出的三种方法
  2. 一些数字:全球企业的人工智能应用进展
  3. 长方形纸做容积最大的长方体_A4纸的尺寸是怎么来的?
  4. python条件语句-Python3 条件控制
  5. CTFshow 命令执行 web57
  6. ABAP中的F4帮助怎么用?
  7. ICCV 2019 运行LCGN遇到的问题及解决办法
  8. Python学习笔记一:数据类型转换
  9. 掌握Java 11的Constantdynamic
  10. jsp文字上下居中显示_如何让任务栏完全透明,图标居中
  11. selenium测试(Java)-- 显式等待(九)
  12. Java 程序设计基础知识
  13. 计算机模块中的画板英文,电脑中将画板导入Mockingbot的方法
  14. 规范化理论:候选键的求解理论和算法
  15. The project uses Gradle 4.1 which is incompatible with Java 11 or newer.
  16. logback日志配置说明
  17. Python 贪心法:真分数表示为埃及分数之和
  18. tableau-瀑布图
  19. 新站如何做SEO及注意事项
  20. 驯服烂代码_驯服老虎,收藏框架

热门文章

  1. 设计模式 -- 享元模式(Flyweight Pattern)
  2. 打开网页状态栏不见了
  3. 方便无阻且全面的python程序exe反编译,可以不使用十六进制编辑器完成的常规反编操作
  4. Photoshop cc 2015 导出web所用格式提示错误 无法完成该操作怎么办?用这个方法轻松解决!
  5. 记一次Mac上launchctl引发的问题
  6. okhttp3-拦截器
  7. 单片机技术与c语言编程教学大纲,单片机应用技术(C语言)教学大纲.doc
  8. 突发!泽宝原创始人被母公司星徽精密追讨10亿元-跨境知道
  9. android项目实战-人脸识别接口应用
  10. bl系列刀片(blade)服务器,产品技术-HPE Integrity BL870c i6 刀片动能服务器-新华三集团-H3C...