微服务学习|Feign:快速入门、自定义配置、性能优化、最佳实践

RestTemplate方式调用存在的问题

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

存在下面的问题

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

参数复杂URL难以维护

Feign的介绍

Feign是一个声明式的http客户端,官方地址: https://github.com/OpenFeign/feign

定义和使用Feign客户端

1.引入依赖

2.在服务消费者order-service的启动类添加注解开启Feign的功能

3.编写Feign客户端

之前服务消费者orderservice调用userservice微服务的方式

用Fegin的方式之后,可以看到代码更加简洁

自定义配置

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

配置Feign日志有两种方式

方式一:配置文件方式

全局生效
局部生效

方式二:java代码方式,需要先声明一个Bean

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

性能优化

Feign底层的客户端实现:

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

Apache HttpClient:支持连接池

OKHttp:支持连接池

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

1.使用连接池代替默认的URLConnection

2.日志级别,最好用basic或none

Feign的性能优化-连接池配置

Feign添加HttpClient的支持,引入依赖:

配置连接池:

最佳实践

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

方式二(抽取):将FeignClient抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用

抽取FeignClient

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

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

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

3.在服务消费者order-service中引入feign-api的依赖

当定义的FeianClient不在SprinaBootApplication的扫描包范围时,这些FeignClient无法使用。有两种方式解决:

方式一: 指定FeignClient所在包

方式二:指定FeignClient字节码

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

5.重启测试

发现调用相关接口,服务提供者userservice依然可以被服务消费者orderservice调用

相关推荐
Asthenia04128 分钟前
数据库分区、Upsert 语义与用户表逻辑删除问题分析及事务逻辑解析
后端
Sirius Wu19 分钟前
Channel如何安全地尝试发送数据
后端·golang
forestsea23 分钟前
MySQL 调优
数据库·mysql·性能优化
代码拾光24 分钟前
微服务之间有哪些调用方式?
微服务·架构设计
yuhouxiyang24 分钟前
学习海康VisionMaster之卡尺工具
学习·计算机视觉
liyongqiangcc25 分钟前
微服务之间有哪些调用方式?
后端
Lester_110130 分钟前
嵌入式学习笔记 - HAL_xxx_MspInit(xxx);函数
笔记·学习
苍煜42 分钟前
MinIO 教程:从入门到Spring Boot集成
java·spring boot·后端·minio
掘金詹姆斯42 分钟前
LangChain4j—持久化聊天记忆 Persistence(五)
java·人工智能