SpringCloud 整个Feign/OpenFeign微服务间调用
一、OpenFeign
简介:OpenFeign是一种声明式、模板化的HTTP客户端,内部封装了RestTemplate(RestTemplate单独用作系统之间通信时代码耦合性还是很高),使用OpenFeign就如同调用本地方法一样简单的访问远程服务。
1. Feign了解
A. Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样,你不用再自己拼接url,拼接参数等操作,一切都交给Feign去做;
B. Feign支持对请求和响应进行gzip压缩,以减少通讯过程中的性能省耗,注意也需要打开server.compression.enabled=true;
C. Feign中已经自动集成了Ribbon依赖和自动配置,默认设置了请求超时时间和重试机制,超时会报错;
D. Feign中默认也对Hystrix有集成,只不过是关闭状态,当请求超时、资源不足时进行服务降级处理,不调用真实服务逻辑,而是使用快速失败(fallback)方式直接返回托底数据,保证服务链条完整,避免服务雪崩;
E. 可以自定义配置HttpClient、OkHttpClient作为Feign的客户端。
2. OpenFeign与Feign对比
A. Feign:是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端,内置Ribbon作为客户端负载均衡,去调用服务注册中心的服务;
B. OpenFeign:是Spring Cloud组件在Feign基础上支持了Spring MVC的注解(@RequestMapping等),通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。
3. pom.xml Maven依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!-- Feign连接池 --> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-httpclient</artifactId> </dependency> <!-- Feign文件 --> <dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form</artifactId> <version>3.8.0</version> </dependency> <dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form-spring</artifactId> <version>3.8.0</version> </dependency>
4. application.yml 文件配置
feign: compression: request: # 开启请求压缩 enabled: true response: # 开启相应压缩 enabled: true hystrix:
# 开启熔断 enabled: true
httpclient:
# 开启连接池
enabled: true
5. 注解
A. @EnableFeignClients:开启Feign的支持,扫描对应的Feign Client;
B. @FeignClient:声明Feign客户端可以访问远程服务,其中value值代表服务名称,用在接口上,Feign通过动态代理生成实现类。
6. 日志级别
package com.rhxy.client.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import feign.Logger; @Configuration public class FeignConfig { @Bean Logger.Level feignLoggerLevel() { return Logger.Level.FULL; } }
A. NONE:不记录任何日志信息,这是默认值;
B. BASIC:仅记录请求的方法、URL以及响应状态码和执行时间;
C. HEADERS:在BASIC基础上,额外记录了请求和响应的头信息;
D. FULL:记录所有请求和响应的明细,包括头信息,请求体,元数据。
7. 定义Feign
A. Feign接口编写要求
编写接口方法一般与被调用的微服务方法名保持一致,同时注意方法中的参数类型与参数个数一定要和被调用的微服务方法中的参数类型和个数保持一致;
若被调用的微服务方法中使用了SpringMVC注解(@PathVariable),那么在Feign接口方法中也一定要加上相同注解,且方法的返回值要保持一致;
B.
可参考:openFeign启动错误
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗