SpringCloud alibaba整合OpenFeign

发布于:2024-04-28 ⋅ 阅读:(24) ⋅ 点赞:(0)

目录

一、为什么使用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


网站公告

今日签到

点亮在社区的每一天
去签到