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模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6天前
|
XML Java 数据格式
🌱 深入Spring的心脏:Bean配置的艺术与实践 🌟
本文深入探讨了Spring框架中Bean配置的奥秘,从基本概念到XML配置文件的使用,再到静态工厂方式实例化Bean的详细步骤,通过实际代码示例帮助读者更好地理解和应用Spring的Bean配置。希望对你的Spring开发之旅有所助益。
45 3
|
22天前
|
XML Java 数据格式
Spring Core核心类库的功能与应用实践分析
【12月更文挑战第1天】大家好,今天我们来聊聊Spring Core这个强大的核心类库。Spring Core作为Spring框架的基础,提供了控制反转(IOC)和依赖注入(DI)等核心功能,以及企业级功能,如JNDI和定时任务等。通过本文,我们将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring Core,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
48 14
|
18天前
|
缓存 Java 数据库连接
Spring框架中的事件机制:深入理解与实践
Spring框架是一个广泛使用的Java企业级应用框架,提供了依赖注入、面向切面编程(AOP)、事务管理、Web应用程序开发等一系列功能。在Spring框架中,事件机制是一种重要的通信方式,它允许不同组件之间进行松耦合的通信,提高了应用程序的可维护性和可扩展性。本文将深入探讨Spring框架中的事件机制,包括不同类型的事件、底层原理、应用实践以及优缺点。
47 8
|
23天前
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
31 6
|
23天前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
74 5
|
20天前
|
XML 前端开发 安全
Spring MVC:深入理解与应用实践
Spring MVC是Spring框架提供的一个用于构建Web应用程序的Model-View-Controller(MVC)实现。它通过分离业务逻辑、数据、显示来组织代码,使得Web应用程序的开发变得更加简洁和高效。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring MVC,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
48 2
|
23天前
|
Java 关系型数据库 MySQL
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
42 5
|
23天前
|
缓存 监控 Java
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
31 5
|
24天前
|
安全 Java 数据安全/隐私保护
如何使用Spring Boot进行表单登录身份验证:从基础到实践
如何使用Spring Boot进行表单登录身份验证:从基础到实践
39 5
|
24天前
|
监控 Java 数据安全/隐私保护
如何用Spring Boot实现拦截器:从入门到实践
如何用Spring Boot实现拦截器:从入门到实践
41 5