Spring Cloud 2021.0.1 实践 OpenFeign | Debug 笔记

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Spring Cloud 2021.0.1 实践 OpenFeign | Debug 笔记

一、问题描述:


目前 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 接口的调用情况进行监控和输出)。


  1. 日志级别如下


  • 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 结果如下:


image.png


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


三、总结:


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


参考地址:spring-cloud-openfeign


相关实践学习
日志服务之数据清洗与入湖
本教程介绍如何使用日志服务接入NGINX模拟数据,通过数据加工对数据进行清洗并归档至OSS中进行存储。
相关文章
|
6天前
|
监控 负载均衡 Java
深入理解Spring Cloud中的服务网关
深入理解Spring Cloud中的服务网关
|
7天前
|
Java 开发工具 git
实现基于Spring Cloud的配置中心
实现基于Spring Cloud的配置中心
|
7天前
|
设计模式 监控 Java
解析Spring Cloud中的断路器模式原理
解析Spring Cloud中的断路器模式原理
|
3天前
|
消息中间件 Java 开发者
Spring Cloud微服务框架:构建高可用、分布式系统的现代架构
Spring Cloud是一个开源的微服务框架,旨在帮助开发者快速构建在分布式系统环境中运行的服务。它提供了一系列工具,用于在分布式系统中配置、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等领域的支持。
22 5
|
6天前
|
Java API 开发工具
Spring Boot与Spring Cloud Config的集成
Spring Boot与Spring Cloud Config的集成
|
6天前
|
存储 安全 Java
实现基于Spring Cloud的分布式配置管理
实现基于Spring Cloud的分布式配置管理
|
12天前
|
消息中间件 负载均衡 Java
Java和Spring Cloud构建分布式系统
Java和Spring Cloud构建分布式系统
|
12天前
|
消息中间件 负载均衡 Java
最容易学会的springboot gralde spring cloud 多模块微服务项目
最容易学会的springboot gralde spring cloud 多模块微服务项目
|
3天前
|
Java 微服务 Spring
【spring cloud】注解@SpringCloudApplication和@SpringBootApplication的区别
【spring cloud】注解@SpringCloudApplication和@SpringBootApplication的区别
|
6天前
|
消息中间件 供应链 Java
实现基于Spring Cloud的事件驱动微服务
实现基于Spring Cloud的事件驱动微服务