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

微服务-Fegin

在之前我们两服务之间调用的时候用的是restTemplate,但是这个方式调用存在很多的问题

  String url = "http://userservice/user/" + order.getUserId();
  • 代码可读性差,编码体验不统一
  • 参数复杂的url难以维护

所以我们大力推出我们今天的主角--Fegin

       Feign是一个声明式的http客户端,其作用就是帮助我们优雅的实现http请求的发送,解决上面的问题

定义和使用Fegin客户端

1.引入依赖

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

2.在A服务的启动类中添加注解开启Figin的功能

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

3.编写Feign客户端:

@FeignClient(value = "userservice")
public interface UserClient {@GetMapping("/user/{id}")User findById(@PathVariable("id") Long id);
}/*
基于SpringMVC的注解来声明远程调用的信息
服务名称:userservice
请求方式:GET
请求路径:/user/{id}
请求参数:Long id
返回值类型:User
*/

4.使用Fegin客户端代替RestTemplate

@Autowiredprivate UserClient userClient;public Order queryOrderById(Long orderId) {// 1.查询订单Order order = orderMapper.findById(orderId);// 2.用Feign远程调用User user = userClient.findById(order.getUserId());// 3.封装user到Orderorder.setUser(user);// 4.返回return order;}

Fegin的使用步骤

  • 引入依赖
  • 添加@EnableFeginClient注解
  • 编写FeginClient接口
  • 使用FeginClient中定义的方法代替RestTemplate

自定义配置来覆盖默认配置,可修改为:

类型作用说明
fegin.Logger.Decoder修改日志级别包含四种不同的级别:NONE、BASIC、HEADERS、FULL

feign.codec.Decoder

响应结果的解析器

http远程调用的结果做解析,例如解析json字符串为java对象

feign.codec.Encoder

请求参数编码

将请求参数编码,便于通过http请求发送

feign. Contract

支持的注解格式

默认是SpringMVC的注解

feign. Retryer

失败重试机制

请求失败的重试机制,默认是没有,不过会使用Ribbon的重试

自定义Fegin的配置

一般配置Fegin日志一般有两种方式:

方法一:

1.全局生效:

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

2.局部生效

feign:client:config: userservice: #这里userseervice就是局部变量loggerLevel: FULL #日志级别

方法二(java代码方式):

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

1.如果是全局配置,则将它放到@EnableFeginClients这个注解中:

@EnableFeignClients(clients = UserClient.class,defaultConfiguration = DefaultFeign

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

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

Fegin性能优化

Fegin的底层的客户端实现:

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

优化Fegin的性能主要包括:

  • 使用连接池代替默认的URLConnection
  • 日志级别,最好用basic或者none

Fegin添加FttpClient的支持:

引入依赖:

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

配置连接池:

feign:client:config:default: #这里default就是全局变量,如果是写服务名称,则是针对某个微服务的配置loggerLevel: FULL #日志级别httpclient:enabled: true # 支持HttpClient的开关max-connections: 200 # 最大连接数max-connections-per-route: 50 # 单个路径的最大连接数

Fegin的最佳实践

 

@EnableFeignClients(clients ="com.ffyc.fegin.clients")

       如果按照第二种方法将Fegin客户端独立出去,在启动SpringBootAppliaction的扫描包范围时,这些Fegin客户端无法使用,所以我们需要去解决这个问题

方式一(指定FeginClient所在包):

@EnableFeignClients(clients ="ffyc.com.fegin.clients")

方式二(指定FeginClient字节码):

@EnableFeignClients(clients ={ UserClient.class})

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

相关文章:

  • [oneAPI] 使用字符级 RNN 生成名称
  • 【ROS】参数服务器--理论模型与参数操作(C++)
  • [oneAPI] 基于BERT预训练模型的英文文本蕴含任务
  • 【洛谷】P1163 银行贷款
  • Java版工程行业管理系统源码-专业的工程管理软件-提供一站式服务 em
  • kafka--技术文档--基本docker中安装<单机>-linux
  • 回归预测 | MATLAB实现WOA-RF鲸鱼优化算法优化随机森林算法多输入单输出回归预测(多指标,多图)
  • Linux系统安全——NAT(SNAT、DNAT)
  • uniapp项目添加人脸识别功能,可用作登录,付款,流程审批前的安全校验
  • SpringBoot面试题
  • Git相关命令
  • 《HeadFirst设计模式(第二版)》第八章代码——模板方法模式
  • RESTful API,以及如何使用它构建 web 应用程序
  • Git+Gitee使用分享
  • 【3D激光SLAM】LOAM源代码解析--transformMaintenance.cpp
  • DiscuzQ 二开教程(7)——二次开发版本部署文档
  • u盘数据丢失但占内存如何恢复?不要着急,这里有拯救方案
  • springboot日志文件名称为什么叫logback-spring.xml
  • Mysql 开窗函数(窗口函数)
  • 计算机视觉之图像特征提取
  • 【面试经典150题】移除元素·JavaScript版
  • Cesium 相机的三种放置方式
  • 看了我这篇帖子,你还会觉得制作电子杂志很难吗?
  • SRE 与开发的自动化协同 -- 生产环境出现 bug 自动生成异常追踪
  • 【简单认识Docker基本管理】
  • 设备管理系统是什么?的修设备管理系统有什么功能?
  • Docker安装并配置Pushgateway
  • 汽车OTA活动高质量发展的“常”与“新”
  • C++信息学奥赛1121:计算矩阵边缘元素之和
  • Android Selector 的使用