OpenFeign详解

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: OpenFeign详解

 OpenFeign概述

Feign

Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端

Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。

Feign旨在使编写Java Http客户端变得更容易。

Feign是一个声明式WebService客户端使用Feign能让编写Web Service客户端更加简单。

Feign也支持可拔插式的编码器和解码器。

它的使用方法是定义一个服务接口然后在上面添加注解。

OpenFeign

OpenFeign是Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。

OpenFeign的@Feignclient可以解析SpringMVc的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

搭建项目

在父项目中,创建子项目cloud-openFeign【前提搭建eureka单机版】

修改pom.xml

<dependencies>
    <!-- OpenFeign-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    <!-- Eureka client-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <!-- actuator -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!-- SpringMVC-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.22</version>
    </dependency>
</dependencies>

image.gif

修改application.yml

server:
  port: 80
spring:
  application:
    name: cloud-openFeign
eureka:
  client:
    service-url:
      # Eureka server 地址
      defaultZone: http://localhost:7001/eureka/

image.gif

启动类

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients//开启openFeign的接口扫描
public class OpenFeign8001 {
    public static void main(String[] args) {
        SpringApplication.run(OpenFeign8001.class,args);
    }
}

image.gif

调用服务

其余项目创建接口

@RestController
@RequestMapping("/eureka/pro")
public class testController {
    @GetMapping("/test")
    public String test(){
        return "test";
    }
}

image.gif

服务层【调用其余应用】

@Component
@FeignClient(value = "CLOUD-EUREKA-PRO")//调用其余应用【value是应用名】
public interface TestService {
    @GetMapping("/eureka/pro/test")
    String test();
}

image.gif

控制层

@RestController
@RequestMapping("/openFeign")
public class TestController {
    @Autowired
    private TestService testService;
    @GetMapping("/test")
    public String test(){
        return testService.test();
    }
}

image.gif

测试

localhost:8001/openFeign/test

image.gif

openFeign超时机制

openFeign超时机制

服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一直等待下去

在某个峰值时刻,大呈的请求都在同时请求服务消费者,会造成线程的大呈堆积,势必会造成雪崩

利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问则自动断开连接

修改application.yml

#配置openFeign超时时间
feign:
  client:
    config:
      default:
        #连接超时时间 2s
        connectTimeout: 2000
        #读取数据超时时间 2s
        readTimeout: 2000

image.gif

OpenFeign日志增强

OpenFeign日志增强

OpenFeign提供了日志增强功能,但是默认不显示任何日志,开发者可以自己配置日志的级别

OpenFeign的日志级别

NONE:默认的,不显示任何日志;

BASIC:仅记录请求方法、URL、响应状态码及执行时间;

HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息;

FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。

配置类-配置日志级别

import feign.Logger;
@Configuration
public class OpenFeignConfig{
    /**
     * 日志级别定义:FULL(除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。)
     */
    @Bean
    Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}

image.gif

application.yml-设置开启日志的接口

logging:
  level:
    org.example.service: debug

image.gif

这里的org.example.service是openFeign接口所在的包名,当然你也可以配置一个特定的openFeign接口


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
负载均衡 架构师 Java
详细讲解OpenFeign的使用姿势!
学会使用Feign最贱优雅地调用服务
21815 9
详细讲解OpenFeign的使用姿势!
|
3月前
|
Java Apache 微服务
OpenFeign
OpenFeign
61 2
|
2月前
|
XML JSON Java
OpenFeign深入学习笔记
OpenFeign 是 Spring Cloud 生态系统中的一个强大工具,它使得微服务之间的通信变得更加简单和高效。通过使用 OpenFeign,开发者可以专注于业务逻辑的实现,而不需要关心底层的 HTTP 通信细节。
|
5月前
|
负载均衡 算法 Java
Spring Cloud Netflix 之 Ribbon
Spring Cloud Netflix Ribbon是客户端负载均衡器,用于在微服务架构中分发请求。它与RestTemplate结合,自动在服务发现(如Eureka)注册的服务之间进行调用。配置包括在pom.xml中添加依赖,设置application.yml以连接Eureka服务器,并在配置类中创建@LoadBalanced的RestTemplate。通过这种方式,当调用如`/user/userInfoList`的接口时,Ribbon会自动处理到多个可用服务实例的负载均衡。
|
5月前
|
负载均衡 前端开发 Java
Spring Cloud 之 OpenFeign
Spring Cloud OpenFeign是Spring官方的声明式服务调用组件,简化了远程服务调用,使其如同调用本地方法。核心注解包括`@FeignClient`、`@EnableFeignClients`、`@GetMapping`和`@PostMapping`。实践中,通过在`pom.xml`添加依赖,创建Feign接口,配置`@FeignClient`,在启动类启用Feign,以及自定义超时设置来实现远程调用和负载均衡。
|
6月前
|
负载均衡 Java 应用服务中间件
Ribbon、Feign和OpenFeign的区别来了
Ribbon、Feign和OpenFeign的区别来了
275 2
|
负载均衡 算法 Java
SpringCloud OpenFeign
SpringCloud OpenFeign
147 0
|
6月前
|
负载均衡 监控 前端开发
Feign 与 OpenFeign
Feign 与 OpenFeign
141 0
|
6月前
|
Java 微服务 Spring
Spring Cloud OpenFeign:基于Ribbon和Hystrix的声明式服务调用
Spring Cloud OpenFeign:基于Ribbon和Hystrix的声明式服务调用
100 0
|
JSON 负载均衡 Java
Springcloud OpenFeign 详解
Springcloud OpenFeign 详解
309 1