Feign

简介: Feign

RestTemplate方式调用存在的问题

先来看看我们以前利用RestTemplate发起远程调用的代码

存在下面的问题:

代码可读性差,编程体验不统一

参数复杂URL难以维护

feign是一个声明式的http客户端。

其作用就是帮助我们优雅地实现http请求的发送,解决上面提到的问题。

使用feign的步骤如下:

1、引入依赖

2、在项目的启动类添加注解开启feign的功能;

3.编写feign客户端:

主要是基于SpringMVC的注解来生命远程调用的信息,比如:

服务名称:userservice

请求方式:GET

请求路径:/user/{id}

请求参数:Long id

返回值类型:User

对比:

原来的

总结

Feign的日志配置

1.方式一是配置文件,feign.client.config.xxx.loggerLevel

1)如果xxx是default则达标全局

2)如果xxx是服务名称,例如userservice则代表某服务

2.方式二是java代码配置Logger.Level这个Bean

1)如果在@EnableFeignClient注解声明则代表全局

2)如果在@Feignclient注解中声明则达标某服务

Feign的性能优化

Feign底层的客户端实现:

  • URLConnection:默认实现,不支持连接池
  • Apache:HttpClient:支持连接池
  • OKHttp:支持连接池

因此提高Feign的性能主要手段就是使用连接池代替默认的URLConnection

URLConnection每次都要建立连接又断开连接。使用连接池能够提升效率。

Feugn的优化:

1.使用httpclient或okhttp代替URLConnectionl

1)引入依赖

2)配置文件开启httpclient功能,设置连接池参数

2.日志级别尽量使用basic

Feign的最佳实践

什么是最佳实践?就是企业在使用的过程中各种踩坑,总结出来的最佳方法。

方式一(继承):给消费者的FeignClient和提供者地controller定义统一的父接口作为标准。

抽取FeignClient

实现最佳时间方式二的步骤如下:

1.首先创建一个module,命名为feign-api,然后引入feign的starter依赖

2.将order-service中编写的UserClient、user、defaultFeignConfiguration都复制到feign-api项目中

3.在order-service中引入feign-api的依赖

4.修改order-service中的所有与上述三个组件有关的import部分,改成导入feign-api中的包


目录
相关文章
|
11月前
|
机器学习/深度学习
 GHSL: 全球1975 年到 2030 年以 5 年间隔建成面积的分布情况(100m)
全球人类住区图层(GHSL)项目提供了1975年至2030年建成面积的分布数据,以每100米网格单元为单位,涵盖建筑总面积及非住宅用途面积。该数据集由欧盟委员会联合研究中心(EC JRC)提供,时间间隔为5年,支持时空分析与预测。详情参见[GHSL 数据包 2023](https://ghsl.jrc.ec.europa.eu/documents/GHSL_Data_Package_2023.pdf?t=1683540422)。
330 7
|
存储 监控 Java
OpenFeign请求拦截器组件RequestInterceptor原理与使用场景
该文章讲述了OpenFeign中的请求拦截器组件RequestInterceptor的原理及其常见使用场景。
OpenFeign请求拦截器组件RequestInterceptor原理与使用场景
|
网络协议 算法 Java
04SpringCloud 之 Consul 简介
04SpringCloud 之 Consul 简介
381 0
|
JavaScript Java 测试技术
基于SpringBoot+Vue的在线图书借阅管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的在线图书借阅管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
149 1
|
存储 Java 关系型数据库
基于SSM框架的电影院售票网站
基于SSM框架的电影院售票网站
基于SSM框架的电影院售票网站
|
人工智能 运维 Prometheus
运维之巅:构建高效自动化运维体系的实战指南
在信息技术飞速发展的今天,企业对IT系统的依赖程度不断加深。如何确保这些复杂系统的稳定性与可靠性,是每一个运维人员面临的挑战。本文将深入探讨构建一个高效自动化运维体系的关键要素,包括工具选择、流程优化、监控告警以及故障响应机制等。通过具体实例和数据分析,揭示自动化运维对企业效率和稳定性的积极影响,并提出一系列可行的实施建议。
312 0
使用System.getProperty获取系统属性
使用System.getProperty获取系统属性
|
缓存 Java 测试技术
Spring Boot中的性能测试与调优
Spring Boot中的性能测试与调优
|
监控 Java API
4.服务网关之Spring Cloud Gateway
4.服务网关之Spring Cloud Gateway
990 0
242Echarts - 3D 散点图(3D Scatter with Dataset)
242Echarts - 3D 散点图(3D Scatter with Dataset)
366 0