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>

修改application.yml

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

启动类

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

调用服务

其余项目创建接口

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

服务层【调用其余应用】

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

控制层

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

测试

localhost:8001/openFeign/test

openFeign超时机制

openFeign超时机制

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

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

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

修改application.yml

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

 

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;
    }
}

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

logging:

  level:

    org.example.service: debug

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月木@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值