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实时生图绘板
目录
相关文章
|
6月前
|
人工智能 Java Nacos
基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
本文将针对 Spring AI Alibaba + Nacos 的分布式多智能体构建方案展开介绍,同时结合 Demo 说明快速开发方法与实际效果。
4766 92
|
6月前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
7249 96
|
7月前
|
人工智能 Java 机器人
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
Spring AI Alibaba集成Ollama,基于Java构建本地大模型应用,支持流式对话、knife4j接口可视化,实现高隐私、免API密钥的离线AI服务。
6385 2
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
|
6月前
|
人工智能 监控 Java
Spring AI Alibaba实践|后台定时Agent
基于Spring AI Alibaba框架,可构建自主运行的AI Agent,突破传统Chat模式限制,支持定时任务、事件响应与人工协同,实现数据采集、分析到决策的自动化闭环,提升企业智能化效率。
Spring AI Alibaba实践|后台定时Agent
|
8月前
|
运维 网络协议 安全
为什么经过IPSec隧道后HTTPS会访问不通?一次隧道环境下的实战分析
本文介绍了一个典型的 HTTPS 无法访问问题的排查过程。问题表现为 HTTP 正常而 HTTPS 无法打开,最终发现是由于 MTU 设置不当导致报文被丢弃。HTTPS 因禁止分片,对 MTU 更敏感。解决方案包括调整 MSS 或中间设备干预。
|
8月前
|
人工智能 Java 开发者
邀您参与 “直通乌镇” Spring AI Alibaba 开源竞技挑战赛!
邀您参与 “直通乌镇” Spring AI Alibaba 开源竞技挑战赛!
|
8月前
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。
|
SpringCloudAlibaba 网络协议 Cloud Native
Spring Cloud Alibaba-全面详解(学习总结---从入门到深化)
Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案。
16632 3
Spring Cloud Alibaba-全面详解(学习总结---从入门到深化)
|
Java Nacos Sentinel
Spring Cloud Alibaba学习指南
由于在2018年Netflix公司宣布对其核心组件Hystrix、Ribbon、zuul、Eureka等进入维护状态,也就是Spring Cloud Netflix系列。由此Spring Cloud Alibaba就诞生了,值得注意的是Spring Cloud Alibaba完全兼容了Spring Cloud Netflix中的Ribbon、Feign、Eureka等组件,所以基于Spring Cloud Netflix的项目可以无缝迁移到Spring Cloud Alibaba。
898 0
|
敏捷开发 运维 资源调度
Spring Cloud Alibaba学习之开幕
Spring Cloud Alibaba学习之开幕

热门文章

最新文章