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

简介: 本章学习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常见问题总结

现有架构总结

参考

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
9月前
|
负载均衡 监控 Java
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
本文详细介绍了 Spring Cloud Gateway 的核心功能与实践配置。首先讲解了网关模块的创建流程,包括依赖引入(gateway、nacos 服务发现、负载均衡)、端口与服务发现配置,以及路由规则的设置(需注意路径前缀重复与优先级 order)。接着深入解析路由断言,涵盖 After、Before、Path 等 12 种内置断言的参数、作用及配置示例,并说明了自定义断言的实现方法。随后重点阐述过滤器机制,区分路由过滤器(如 AddRequestHeader、RewritePath、RequestRateLimiter 等)与全局过滤器的作用范围与配置方式,提
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
|
10月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
1458 3
|
8月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
1348 2
Spring Boot 3.x 微服务架构实战指南
|
人工智能 Java API
Spring AI 实战|Spring AI入门之DeepSeek调用
本文介绍了Spring AI框架如何帮助Java开发者轻松集成和使用大模型API。文章从Spring AI的初探开始,探讨了其核心能力及应用场景,包括手动与自动发起请求、流式响应实现打字机效果,以及兼容不同AI服务(如DeepSeek、通义千问)的方法。同时,还详细讲解了如何在生产环境中添加监控以优化性能和成本管理。通过Spring AI,开发者可以简化大模型调用流程,降低复杂度,为企业智能应用开发提供强大支持。最后,文章展望了Spring AI在未来AI时代的重要作用,鼓励开发者积极拥抱这一技术变革。
4455 71
Spring AI 实战|Spring AI入门之DeepSeek调用
|
8月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
安全 Java 数据库
Spring Security 实战指南:从入门到精通
本文详细介绍了Spring Security在Java Web项目中的应用,涵盖登录、权限控制与安全防护等功能。通过Filter Chain过滤器链实现请求拦截与认证授权,核心组件包括AuthenticationProvider和UserDetailsService,负责用户信息加载与密码验证。文章还解析了项目结构,如SecurityConfig配置类、User实体类及自定义登录逻辑,并探讨了Method-Level Security、CSRF防护、Remember-Me等进阶功能。最后总结了Spring Security的核心机制与常见配置,帮助开发者构建健壮的安全系统。
2425 0
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
564 61
|
10月前
|
人工智能 监控 安全
如何快速上手【Spring AOP】?核心应用实战(上篇)
哈喽大家好吖~欢迎来到Spring AOP系列教程的上篇 - 应用篇。在本篇,我们将专注于Spring AOP的实际应用,通过具体的代码示例和场景分析,帮助大家掌握AOP的使用方法和技巧。而在后续的下篇中,我们将深入探讨Spring AOP的实现原理和底层机制。 AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架中的核心特性之一,它能够帮助我们解决横切关注点(如日志记录、性能统计、安全控制、事务管理等)的问题,提高代码的模块化程度和复用性。
|
存储 人工智能 Java
Spring AI与DeepSeek实战四:系统API调用
在AI应用开发中,工具调用是增强大模型能力的核心技术,通过让模型与外部API或工具交互,可实现实时信息检索(如天气查询、新闻获取)、系统操作(如创建任务、发送邮件)等功能;本文结合Spring AI与大模型,演示如何通过Tool Calling实现系统API调用,同时处理多轮对话中的会话记忆。
2916 57

热门文章

最新文章