目录
一、为什么使用OpenFeign
二、准备两个服务
三、最简单使用- 返回字符串
①引入openfeign依赖
②调用端在启动类上添加@EnableFeignClients注解
③在被调用端写一个简单的接口
④在调用端新建一个service类 专门用于远程调用
编辑 ⑤ 在调用端写一个conteoller 注入这个service,再调用这个方法
⑥ 访问,看看是否可以远程调用
四、返回一个对象(OderOKDTO)
①被调用的服务
②调用端 openservice
③controller
编辑 五、返回对象结合有参使用
①被调用者
②远程调用
编辑 ③ controller
六、条件查询(按id或者userId查询),不加注解会报405错误
七、日志配置(重点掌握配置文件形式)
7.1 全局配置
7.2 局部配置
7.3 在配置文件配置
八、 超时配置
8.1 全局配置
8.2 配置文件中配置
九、契约配置(了解)
十、源码参考
一、为什么使用OpenFeign
OpenFeign 是一个Java语言编写的声明式服务客户端,它允许开发者通过编写接口和注解来定义对远程服务的调用,而无需关注底层HTTP请求的具体实现细节。通过集成到Spring Cloud环境中,它可以无缝结合服务发现、负载均衡以及Hystrix断路器等功能,从而大大简化了微服务间的相互调用。开发者只需对接口方法添加相应的HTTP注解,如@RequestMapping、@GetMapping等,OpenFeign就会依据这些注解生成并代理远程服务的接口,使得服务间调用就像调用本地方法一样直观和方便。
二、准备两个服务
一个是订单服务,一个是用户服务,用户服务去调用订单服务
三、最简单使用- 返回字符串
在服务调用方使用openfeign
①引入openfeign依赖
<!-- openfeign 远程调用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
②调用端在启动类上添加@EnableFeignClients注解
③在被调用端写一个简单的接口
④在调用端新建一个service类 专门用于远程调用
⑤ 在调用端写一个conteoller 注入这个service,再调用这个方法
⑥ 访问,看看是否可以远程调用
四、返回一个对象(OderOKDTO)
①被调用的服务
②调用端 openservice
③controller
五、返回对象结合有参使用
①被调用者
②远程调用
③ controller
六、条件查询(按id或者userId查询),不加注解会报405错误
-
@SpringQueryMap
注解是Spring Cloud OpenFeign提供的一个扩展注解,用于处理HTTP GET请求中的查询参数。当我们在OpenFeign中定义一个接口方法,并且需要传递一组复杂的查询参数时,可以使用此注解来绑定一个POJO(Plain Old Java Object)对象或Map类型的数据结构,以便自动将其中的属性转换为请求URL中的查询参数。 - 简单一句话,能将对象或者Map中的key-value自动拼接到get查询,拼接问号传参。
①被调用者
②远程调用
③ controller
七、日志配置(重点掌握配置文件形式)
有时候我们遇到 Bug,比如接口调用失败、参数没收到等问题,或者想看看调用性能,就需要配置 Feign 的日志了,以此让 Feign 把请求信息输出来。
Feign 提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解 Feign 中 Http 请求的细节。说白了就是对Feign接口的调用情况进行监控和输出
通过源码可以看到日志等级有 4 种,分别是:
-
NONE【性能最佳,适用于生产】:不记录任何日志(默认值)。
-
BASIC【适用于生产环境追踪问题】:仅记录请求方法、URL、响应状态代码以及执行时间。
-
HEADERS:记录BASIC级别的基础上,记录请求和响应的header。
-
FULL【比较适用于开发及测试环境定位问题】:记录请求和响应的header、body和元数据。
7.1 全局配置
注意一:此处配置@Configuration注解就会全局生效,如果想指定对应某一个服务生效,就不能配置.
注意二: 因为feign调试日志是debug级别输出,springboot默认的日志级别是info,所以feign的debug日志级别就不会输出,一定要结合
logging.level.com.beiyou = debug
@Configuration
public class FeignConfig
{
@Bean
Logger.Level feignLoggerLevel()
{
return Logger.Level.FULL;
}
}
Java
7.2 局部配置
局部配置,让调用的微服务生效,在@FeignClient 注解中指定使用的配置类
7.3 在配置文件配置
logging.level.com.beiyou = debug开启日志
##配置feign 的日志级别
#-- default 全局配置
feign.client.config.default.loggerLevel=NONE
#-- nacos-a 具体服务名
feign.client.config.nacos-a.loggerLevel=FULL
CoffeeScript
八、 超时配置
通过 Options 可以配置连接超时时间和读取超时时间
8.1 全局配置
@Configurationpublic class FeignConfig { @Bean public Request.Options options() { return new Request.Options(10L, TimeUnit.SECONDS, 60L,TimeUnit.SECONDS,true); }}
Java
8.2 配置文件中配置
#全局配置feign.client.config.default.connectTimeout=5000
feign.client.config.default.readTimeout=10000
这里default 是一个特殊的客户端名称,用于表示全局配置。设置 connectTimeout 和 readTimeout 属性的值来定义全局的连接超时时间和读取超时时间。
#局部配置 请将 <clientName> 替换为实际的Feign客户端名称。feign.client.config.<clientName>.connectTimeout=5000
feign.client.config.<clientName>.readTimeout=10000
feign.client.config.order-service.connectTimeout=5000 # 连接超时时间,默认10s order-service: #对应微服务feign.client.config.order-service.readTimeout=10000 # 请求处理超时时间,默认60s
Swift
补充说明: Feign的底层用的是Ribbon,但超时时间以Feign配置为准
http://https://blog.csdn.net/xcg340123/article/details/136021389
九、契约配置(了解)
Spring Cloud 在 Feign 的基础上做了扩展,使用 Spring MVC 的注解来完成Feign的功能。原生的 Feign 是不支持 Spring MVC 注解的,如果你想在 Spring Cloud 中使用原生的注解方式来定义客户端也是可以的,通过配置契约来改变这个配置,Spring Cloud 中默认的是 SpringMvcContract。
Spring Cloud 1 早期版本就是用的原生Fegin. 随着netflix的停更替换成了Open feign
1)修改契约配置,支持Feign原生的注解
注意:修改契约配置后,OrderFeignService 不再支持springmvc的注解,需要使用Feign原生的注解
/** * 修改契约配置,支持Feign原生的注解 * @return */@Beanpublic Contract feignContract() { return new Contract.Default();}
Plain Text
2)OrderService 中配置使用Feign原生的注解
@FeignClient(value = "order-service")public interface OrderService { @RequestLine("GET /hello") public String hello();}
Java
3)也可以通过yml配置契约
feign: client: config: order-service: #对应微服务 loggerLevel: FULL contract: feign.Contract.Default #指定Feign原生注解契约配置
十、源码参考
源码已经放入云效
https://codeup.aliyun.com/62858d45487c500c27f5aab5/spring-cloud-alibaba-root.git