likes
comments
collection
share

Spring Cloud 2021.0.1 实践 OpenFeign | Debug 笔记

作者站长头像
站长
· 阅读数 17

一、问题描述:

目前 Spring Cloud 已经更新到 2021.0.1 我们今天一起来学习 OpenFeign

Fegin 定义: Feign 是声明性 Web 服务客户端。它使编写 Web 服务客户端更加容易。要使用 Feign,请创建一个接口并对其进行注释。它具有可插入注释支持,包括 Feign 注释和 JAX-RS 注释。Feign 还支持可插拔编码器和解码器。Spring Cloud 添加了对 Spring MVC 注释的支持,并支持使用 HttpMessageConverters Spring Web 中默认使用的注释。Spring Cloud 集成了 Ribbon 和Eureka 以及 Spring Cloud LoadBalancer,以在使用Feign时提供负载平衡的http客户端。

二、解决方法:

依赖和配置

build.gradle 文件和 yml 配置文件, 主要是定义以来

build.gradle 文件配置如下,我使用的是 spring-boot 2.6.4spring-cloud 2021.0.1

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.6.4'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
}

group 'com.ssm'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenLocal()
    maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
}

ext {
    set('springCloudVersion', "2021.0.1")
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-actuator'

    implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

yml 文件我主要是修改了端口和定义服务名,需要同步添加即可。

server:
  port: 8081
spring:
  application:
    name: order-service

启动文件和 feign 调用

启动类增加 @EnableFeignClients 保证 @FeignClient 接口也可以被扫描到。

@EnableFeignClients
@SpringBootApplication
public class OrderApp {

    public static void main(String[] args) {
        SpringApplication.run(OrderApp.class);
    }
}

微服务调用接口

  1. 业务逻辑接口增加 @FeignClient 配置调用 Provider 服务。
@FeignClient(name = "payment-service", url = "127.0.0.1:8091", path = "/payment")
public interface PaymentFegin {

    @PostMapping("/create")
    PaymentVo create(@RequestBody @Validated PaymentDto paymentDto);
}
  1. PaymentFegin 注入到调用类里面
@Slf4j
@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private PaymentFegin paymentFegin;

    @GetMapping("/create")
    public OrderVo create(@Validated OrderDto orderDto) {
        log.info("uri:/order/create lang:{}", LocaleContextHolder.getLocale().getLanguage());
        OrderVo orderVo = new OrderVo();
        orderVo.setId(1L);
        orderDto.setCode("ORT0000001");

        PaymentDto paymentDto = new PaymentDto();
        paymentDto.setId(orderDto.getId());
        paymentDto.setCode(orderDto.getCode());
        paymentFegin.create(paymentDto);
        return orderVo;
    }
}

日志打印

  1. 配置日志的 LEVEL Feign 提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解 Fegin 中 HTTP 请求的细节(说白了就是对Feign 接口的调用情况进行监控和输出)。

  2. 日志级别如下

  • NONE: 默认的,不显示任何日志
  • BASIC: 仅记录请求方法、URL、响应状态码以及执行时间
  • HEADERS:除了BASIC 中自定义的信息外,还有请求和响应的信息头
  • FULL: 除了HEADERS中定义的信息哇, 还有请求和响应的正文以及元数据。
  1. 声明代码
@Configuration
public class FeignConfig {

    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
}

等价配置, 主要是设置 loggerLevel 日志级别。

feign:
  client:
    config:
      default:
        loggerLevel: full
  1. yml 文件中增加配置
logging:
  level:
    io.xx.order.fegin: debug
  1. 访问接口 http://127.0.0.1:8081/order/create 结果如下:

Spring Cloud 2021.0.1 实践 OpenFeign | Debug 笔记

从上面可以看出,这个日志还是非常完整和丰富的,需要注意的是日志量非常大,适合 dev 和 test 环境使用,生产环境禁用。

三、总结:

feign 是一个声明式的 Web 服务客户端,让编写Web服务客户端变得非常容易,只需要创建一个接口并正在接口上添加注解即可。

参考地址:spring-cloud-openfeign

转载自:https://juejin.cn/post/7070892185746407437
评论
请登录