最新版Spring Cloud Alibaba微服务架构-Openfeign服务调用篇

文章目录

  • 前言
  • 一、OpenFeign配置使用
    • 1、引入pom依赖
    • 2、消费端开启Feign服务调用
    • 3、消费端动态代理Service接口
    • 3、消费端测试
  • 二、OpenFeign日志配置
    • 1、全局配置日志
    • 2、针对单个服务配置日志
    • 3、通过配置文件配置日志
      • 1、全局配置
      • 2、针对某个服务单独配置
  • 三、OpenFeign自定义拦截器
    • 1、全局配置
    • 2、针对某个服务单独配置
  • 总结

前言

Spring Cloud OpenFeign是Feign的升级版,目前Github上面已经更新到11.6版本了,Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。

最新版Spring Cloud Alibaba微服务架构-Openfeign服务调用篇_第1张图片

一、OpenFeign配置使用

OpenFeign的使用首先肯定得依赖Spring Cloud,作为Alibaba微服务架构,以下依赖必不可少。
最新版Spring Cloud Alibaba微服务架构-Openfeign服务调用篇_第2张图片

1、引入pom依赖

<!-- openfeign服务调用 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2、消费端开启Feign服务调用

在订单服务(dt-order-servic)的启动器上开启Feign的服务调用,以此来调用库存服务端的接口方法。

@EnableFeignClients :开启服务调用

最新版Spring Cloud Alibaba微服务架构-Openfeign服务调用篇_第3张图片

3、消费端动态代理Service接口

@FeignClient(name = "dt-stock-service",path = "/stock")
public interface StockFeignService {
    
    @GetMapping(value = "/getPort")
    String getPort();
}

@FeignClient(name = “dt-stock-service”,path = “/stock”)

dt-stock-service:服务提供者的服务名称,path:服务提供者的统一前缀(即Controller的前缀路径,如果没有就不填)

最新版Spring Cloud Alibaba微服务架构-Openfeign服务调用篇_第4张图片

3、消费端测试

编写控制器,调用服务暴露接口方法:

最新版Spring Cloud Alibaba微服务架构-Openfeign服务调用篇_第5张图片

最新版Spring Cloud Alibaba微服务架构-Openfeign服务调用篇_第6张图片

二、OpenFeign日志配置

在默认情况下,OpenFeign默认的日志是关闭的,在我们开发过程中,需要调试接口,或者看看调用性能,就需要配置OpenFeign的日志,把OpenFeign的调用日志清晰的打印出来,方便我们开发。

Feign日志级别:
NONE,无记录(DEFAULT)。
BASIC,只记录请求方法和URL以及响应状态代码和执行时间。
HEADERS,记录基本信息以及请求和响应标头。
FULL,记录请求和响应的头文件,正文和元数据

1、全局配置日志

OpenFeignConfig.class

/**
 * 全局配置:OpenFeign的全局日志配置
 * 局部配置:不加@Configuration注释
 * @author DT
 * @date 2021/8/9 22:00
 */
@Configuration
public class OpenFeignConfig {

    @Bean
    public Logger.Level feignLoggerLevel(){
        // 输出日志级别FULL
        return Logger.Level.FULL;
    }
}

SpringBoot的日志级别默认为info,大于full,导致feign的日志配置不会输出,所以加以下配置:

#SpringBoot的日志级别默认为info,大于full,导致feign的日志配置不会输出,所以加以下配置
logging:
  level:
    com.dt.springcloud.openfeign: debug

最新版Spring Cloud Alibaba微服务架构-Openfeign服务调用篇_第7张图片

输出打印:
最新版Spring Cloud Alibaba微服务架构-Openfeign服务调用篇_第8张图片

2、针对单个服务配置日志

最新版Spring Cloud Alibaba微服务架构-Openfeign服务调用篇_第9张图片
使用configuration = OpenFeignConfig.class
最新版Spring Cloud Alibaba微服务架构-Openfeign服务调用篇_第10张图片
当然我们也可以通过配置文件的方式来配置.

3、通过配置文件配置日志

1、全局配置

针对所有服务配置:

# SpringBoot的日志级别默认为info,大于full,导致feign的日志配置不会输出,所以加以下配置
logging:
  level:
    com.dt.springcloud.openfeign: debug
# feign日志全局配置
feign:
  client:
    config:
      default:
        loggerLevel: BASIC

在这里插入图片描述

2、针对某个服务单独配置

当然你也可以针对某个服务进行配置单独的日志,将调用的微服务名称改成default就配置成全局的了:

# feign针对某个服务配置日志
feign:
  client:
    config:
      #想要调用的微服务名称
      dt-stock-service:
        loggerLevel: BASIC

在这里插入图片描述

三、OpenFeign自定义拦截器

OpenFeign拦截器,无非就是和我们SpringMVC中的拦截器一样,每次feign发起http调用之前,会去执行拦截器中的逻辑,比如统一添加header头信息,对body体中的信息做修改或替换。feign提供了 feign.RequestInterceptor 接口,只需实现该接口,实现对应方法,并将实现类通过 @Configuration交给spring容器管理,即可加上我们自己的通用处理逻辑。

1、全局配置

@CommonsLog
@Configuration
public class CustomFeignInterceptor implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate requestTemplate) {
        requestTemplate.header("token","ABC123456");
        byte[] body = requestTemplate.body();
        String url = requestTemplate.url();
        String method = requestTemplate.method();
        Map<String, Collection<String>> map = requestTemplate.headers();
        log.info("OpenFeign拦截器启动......");
        log.info("body->>>"+(body == null ? null : body.length));
        log.info("url->>>"+url);
        log.info("method->>>"+method);
        log.info("header->>>"+map.get("token"));
    }
}

最新版Spring Cloud Alibaba微服务架构-Openfeign服务调用篇_第11张图片

查看打印结果:

最新版Spring Cloud Alibaba微服务架构-Openfeign服务调用篇_第12张图片
如果还需要做其他处理,可以对RequestTemplate做相应处理来实现,比如令牌的验证,刷新,鉴权等等。

2、针对某个服务单独配置

除了上面的第一种全局配置方式以外,我们也可以在配置文件中,单独针对某个被调用的服务进行配置,和我们上面的日志配置方式一样。

在这里插入图片描述

# feign针对某个服务配置
feign:
  client:
    config:
      #想要调用的微服务名称
      dt-stock-service:
        connectTimeout: 5000  # 连接超时时间
        readTimeout: 5000     # 读取超时时间
        loggerLevel: BASIC
        requestInterceptors: # 配置拦截器,相当于代码配置方式中的RequestInterceptor
          - com.dt.springcloud.interceptor.CustomFeignInterceptor

dt-stock-service 想要调用的服务名称。

总结

没有谁的幸运,是凭空而来,只有当你足够努力,你才会足够幸运。这世界不会辜负每一份努力和坚持,时光不会怠慢执着而勇敢的每一个人

本篇文章结束了,后面我们再继续深入研究微服务其他的组件的使用以及原理剖析,创作不易,喜欢的请关注小编CSDN:https://blog.csdn.net/qq_41107231 以及掘金:https://juejin.cn/user/3940246036699848

你可能感兴趣的:(Spring,Cloud系列,spring,cloud,spring,cloud,alibaba,微服务架构)