当前位置: 首页 > news >正文

SpringCloud:Feign的使用及配置

目录

Feign的使用及配置

1、Feign替代RestTemplate

2、使用Fegin步骤

3、自定义配置

4、Feign使用优化

5、Feign的最佳实践方式


Feign的使用及配置

1、Feign替代RestTemplate

RestTemplate方式远程调用的问题

 问题:

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

2、参数复杂,URL难以维护

Feign介绍

Feign是一个声明式的http客户端,官方地址:OpenFeign · GitHub

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

2、使用Fegin步骤

1、引入依赖

        <!--feign客户端依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

2、在启动类添加注解开启Feign的功能

@EnableFeignClients
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
@EnableFeignClients
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}
}

 3、编写Feign客户端

@FeignClient("userservice")//服务名称
public interface UserClient {@GetMapping("/user/{id}")//访问路径User findById(@PathVariable("id") Long id);//对应远程调用controller接口
}

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

服务名称: userservice        请求方式:GET·        请求路径:/user/{lid}·

请求参数:Long id·        返回值类型: User

3、自定义配置

Feign运行自定义配置来覆盖默认配置,可以修改的配置如下:
 

类型作用说明
feign.Logger.Level修改日志级别包含四种不同的级别:NONE、BASIC、HEADERS、FULL
feign.codec.Decoder响应结果的解析器http远程调用的结果做解析,例如解析json字符串为java对象
feign.codec.Encoder请求参数编码将请求参数编码,便于通过http请求发送
feign.Contract支持的注解格式默认是SpringMVC的注解
feign. Retryer失败重试机制请求失败的重试机制,默认是没有,不过会使用Ribbon的重试

Feign日志配置

1、yml文件配置

全局生效

feign:client:config:default:  #这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置loggerLevel: FULL #日志级别

局部生效

feign:client:config:userservice: #这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置loggerLevel: FULL #日志级别

2、 java代码配置

定义一个配置类

public class DefaultFeignConfig {@Beanpublic Logger.Level logLevel(){return Logger.Level.BASIC;}
}

如果是全局配置,则把它放到@EnableFeignClients这个注解中:

@EnableFeignClients(defaultConfiguration = DefaultFeignConfig.class)

如果是局部配置,则把它放到@FeignClient这个注解中:

@FeignClient(value = "userservice",configuration = FeignClientConfiguration.class)

4、Feign使用优化

Feign底层的客户端实现:

URLConnection:默认实现,不支持连接池.

Apache HttpClient:支持连接池

OKHttp:支持连接池

因此优化Feign的性能主要包括:

使用连接池代替默认的URLConnection

日志级别,最好用basic或none

1、引入依赖

        <!--引入HttpClient依赖--><dependency><groupId>io.github.openfeign</groupId><artifactId>feign-httpclient</artifactId></dependency>

 2、配置连接池

feign:httpclient:enabled: true # 支持HttpClient的开关max-connections: 200 # 最大连接数max-connections-per-route: 50 # 单个路径的最大连接数

总结:

Feign的优化:
1.日志级别尽量用basic
2.使用HttpClient或OKHttp代替URLConnection
        引入feign-httpClient依赖
        配置文件开启httpclient功能,设置连接池参数

5、Feign的最佳实践方式

方式一(继承):

给消费者的FeignClient和提供者的controller定义统一的父接口作为标准。
 

 弊端:

1、服务紧耦合
2、父接口参数列表中的映射不会被继承

方式二(抽取):

将FeignClient抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,

提供给所有消费者使用

使用这种方式时,如果定义的FeignClient不在SpringBootApplication的扫描包范围时,这些

FeignClient无法使用。有两种方式解决:

1、指定FeignClient所在包

 2、指定FeignClient字节码

 总结:Feign的最佳实践

1、让controller和FeignClient继承同一接口

2、将Feignclient、POJO、Feign的默认配置都定义到一个项目中,供所有消费者使用
 

http://www.lryc.cn/news/32154.html

相关文章:

  • Parquet学习与使用之BloomFilter的应用
  • 95%置信区间计算-理解
  • 深度学习pytorch实战三:VGG16图像分类篇自建数据集图像分类三类
  • 2023年3月软考高项(信息系统项目管理师)报名走起!!!
  • 模电学习11 运算放大器学习入门
  • spring学习3.5
  • 名创优品:国内“触礁”,海外“提速”
  • Java学习笔记 --- Tomcat
  • 面向对象设计模式:行为型模式之状态模式
  • 【Python入门第二十五天】Python 作用域
  • 运行时数据区及程序计数器
  • 手写操作系统+文件系统开源啦
  • 小众但意外觉得蛮好用的剪辑软件!纯良心分享
  • 一文带你入门angular(下)
  • 2023-3-6刷题情况
  • 一篇教你解决如何在不加锁的情况下解决多线程问题!
  • OPT(奥普特)一键测量传感器SmartFlash高精度的四重保证
  • 网络协议丨从物理层到MAC层
  • 【Maven】(五)Maven模块的继承与聚合 多模块项目组织构建
  • Linux 常用软件安装(jdk,redis,mysql,minio,kkFileView)
  • 单链表及其相关函数
  • Linux段错误调试
  • Gopro卡无法打开视频恢复方法
  • vmware虚拟机与树莓派4B安装ubuntu1804 + ros遇到的问题
  • JS逆向hook通用脚本合集
  • nacos的介绍和下载安装(详细)
  • 【算法经典题集】前缀和与数学(持续更新~~~)
  • 寻找时空中的引力波:科学家控制量子运动至量子基态
  • 第六讲:ambari-web 模块二次开发
  • echarts--提示框显示不全问题记录