Spring Cloud Alibaba 实战(六) - 声明式HTTP客户端-Feign

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本章学习Feign,包括Feign的自定义配置,实现文件上传,进一步实现代码的重用,Feign性能优化,Feign与RestTemplate的对比与选择.1 使用Feign实现远程HTTP调用Feign是Netflix开源的声明式HTTP客户端添加依赖新建包及接口服务实现类...

本章学习Feign,包括Feign的自定义配置,实现文件上传,进一步实现代码的重用,Feign性能优化,Feign与RestTemplate的对比与选择.

1 使用Feign实现远程HTTP调用

  • Feign是Netflix开源的声明式HTTP客户端
  • 添加依赖
    在这里插入图片描述

  • 新建包及接口
  • 服务实现类

2 Feign的组成

  • 查找
  1. 默认的Feign : 使用的URLConnection性能差
  2. 和ribbon配合的 : 使用了代理模式,其实也就是feign-default的代理
  3. contract
    由于feign默认的注解是非Spring MVC型的

  • 通过该默认类实现了MVC注解

细粒度配置自定义

默认的Feign是不打印日志的

  • 自定义Feign日志级别

下面将设置为FULL级别

Java代码方式 - 指定日志级别

  • 接口类
  • 日志配置类
  • 配置文件
  • 注意坑,如果在feign配置类加了该注解,就必须放在compscan包以外,以免复制上下文重复扫描问题

配置属性方式 - 指定日志级别

将之前的Java配置类的注解注释掉

  • 配置文件

全局配置

Java代码方式 - 指定日志级别

方式一:让父子上下文ComponentScan重叠(强烈不建议使用)
◆ 方式二[唯一正确的途径] :
@EnableFeignClients(defaultConfiguration=xxx.class)

  • 先将之前的细粒度配置注释掉!
  • 找到启动类的EFC注解并指定为配置类

配置属性方式 - 指定日志级别

  • 恢复之前的配置文件信息并修改如下

支持的配置项

  • 代码方式

  • 属性方式

配置最佳实践总结

  • Ribbon配置 VS Feigne配置
  • Feign代码方式 VS 属性方式

最佳实践

  • 尽量使用属性配置,属性方式实现不了的情况下再考虑用代码配置
  • 在同一个微服务内尽量保持单一性,比如统一使用属性配置,不要两种方式混用,增加定位代码的复杂性

Feign的继承

  • UserCenter中的
  • ContentCenter中的,使其继承上面的代码

关于继承特性的争议

◆ 官方观点:不建议使用

这里继承会产生紧耦合

◆ 业界观点:很多公司使用
比如User服务修改了字段,而Content服务却不知道,没有修改,那么调用时就会报错
◆ 个人观点:权衡利弊

此处有争议,不赘述

多参数请求构造

比如在User服务中有这样一个请求


那么如何使用Feign去请求这样的API呢?

回到Content服务,写代码

  • 写一测试类
  • 在测试启动类添加该测试项目
  • 启动报错,根据error提示,添加配置,之后正常启动!

因为现在有两个client都叫user-client(测试类也叫user-client), 重名了,所以Spring创建代理时会有问题,加上上述配置即可解决

Feign脱离Ribbon使用

在Content服务写代码

  • 测试类添加测试项目
  • 直接访问即可!

RestTemplate VS Feign

如何选择?

◆ 原则:尽量用Feign ,杜绝使用RestTemplate
◆ 事无绝对,合理选择

Feign性能优化

连接池 [提升15%左右]

  • 添加依赖
  • 配置文件

使用okhttp同理配置如上两步骤

日志级别

因为默认不打印日志哦!建议设置为basic,不要为full哦

常见问题总结 - 推荐阅读

Feign常见问题总结

现有架构总结

参考

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
9天前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
55 29
|
24天前
|
人工智能 SpringCloudAlibaba 自然语言处理
SpringCloud Alibaba AI整合DeepSeek落地AI项目实战
在现代软件开发领域,微服务架构因其灵活性、可扩展性和模块化特性而受到广泛欢迎。微服务架构通过将大型应用程序拆分为多个小型、独立的服务,每个服务运行在其独立的进程中,服务与服务间通过轻量级通信机制(通常是HTTP API)进行通信。这种架构模式有助于提升系统的可维护性、可扩展性和开发效率。
229 1
|
2天前
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
|
2月前
|
人工智能 安全 Java
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
241 4
|
3月前
|
SpringCloudAlibaba 负载均衡 Dubbo
【SpringCloud Alibaba系列】Dubbo高级特性篇
本章我们介绍Dubbo的常用高级特性,包括序列化、地址缓存、超时与重试机制、多版本、负载均衡。集群容错、服务降级等。
【SpringCloud Alibaba系列】Dubbo高级特性篇
|
3月前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
3月前
|
SpringCloudAlibaba JavaScript Dubbo
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
本文介绍了 Dubbo-Admin 的安装和使用步骤。Dubbo-Admin 是一个前后端分离的项目,前端基于 Vue,后端基于 Spring Boot。安装前需确保开发环境(Windows 10)已安装 JDK、Maven 和 Node.js,并在 Linux CentOS 7 上部署 Zookeeper 作为注册中心。
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
|
3月前
|
SpringCloudAlibaba Dubbo Java
【SpringCloud Alibaba系列】Dubbo基础入门篇
Dubbo是一款高性能、轻量级的开源Java RPC框架,提供面向接口代理的高性能RPC调用、智能负载均衡、服务自动注册和发现、运行期流量调度、可视化服务治理和运维等功能。
【SpringCloud Alibaba系列】Dubbo基础入门篇
|
2月前
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
519 7
|
6月前
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba