OpenFeign

OpenFeign

概述

OpenFeign是Spring Cloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等等。OpenFeign的**@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理方式山生实现类,实现类中做负载均衡**并调用其它服务。

Fegin

Feign是SpringCloud组件中的一个轻量级RESTful的HTTP服务客户端,Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务,Feign的使用方法是:使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务。现在Fegin已停用。

openFeign的依赖

<dependency>
	<groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

OpenFeign的服务调用

概述

以前我们的服务消费者使用Ribbon+RestTemplate进行服务调用,现在我们使用OpenFeign来进行调用,一个接口+一个注解(@FeignClient)的方式。

yml文件

server:
  port: 8020
spring:
  application:
    name: eureka-feign
eureka:
  client:
    # 表示将自己注册进EurekaServer,默认为true
    register-with-eureka: false
    # 是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,集群必须配置为true
    fetch-registry: true
    service-url:
      # 集群注册
      defaultZone: http://localhost:7001/eureka,http://localhost:7002/eureka
  • 主启动类(添加@EnableFeignClients注解)
    在这里插入图片描述

  • service业务层接口添加FeignClient注解
    在这里插入图片描述
    注意还要加上@Component注解

属性:

  • name:对象名
  • url:对象的地址

OpenFeign的超时控制

OpenFeign默认等待1秒钟,超过后报错。

设置OpenFeign的超时等待

因为具体发送请求包含负载均衡都是由底层的Ribbon实现的,所以我们实际上是要配置Ribbon的超时设置。

yml配置
server:
  port: 8020
spring:
  application:
    name: eureka-feign
eureka:
  client:
    # 表示将自己注册进EurekaServer,默认为true
    register-with-eureka: false
    # 是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,集群必须配置为true
    fetch-registry: true
    service-url:
      # 集群注册
      defaultZone: http://localhost:7001/eureka,http://localhost:7002/eureka
# 设置OpenFeign的客户端超时时间(OpenFeign底层是Ribbon)
ribbon:
  # 读取超时时间,建立连接后服务器取到可用资源所用的时间
  ReadTimeout: 5000
  # 连接所用的时间,适用于网络正常情况下,两端连接所用的时间
  ConnectTimeout: 5000

OpenFeign日志增强

OpenFeign提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解Feign中Http请求的细节。

日志级别

OpenFeign有一下几个日志级别

  1. NONE:默认的,不显示任何日志。
  2. BASIC:仅记录请求方法,URL,响应状态码及执行时间。
  3. HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息。
  4. FULL:除了HEADERS中定义的信息之外,还有请求和响应正文元数据。

日志配置

OpenFeign的日志需要专门有个日志Bean来定义

在@Configuration的类中配置

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

Logger是OpenFeign的Logger类,不要用错了(import feign.Logger;)

在application.yml中配置每个业务类的日志监控级别。

server:
  port: 8020
spring:
  application:
    name: eureka-feign
eureka:
  client:
    # 表示将自己注册进EurekaServer,默认为true
    register-with-eureka: false
    # 是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,集群必须配置为true
    fetch-registry: true
    service-url:
      # 集群注册
      defaultZone: http://localhost:7001/eureka,http://localhost:7002/eureka
# 设置OpenFeign的客户端超时时间(OpenFeign底层是Ribbon)
ribbon:
  # 读取超时时间,建立连接后服务器取到可用资源所用的时间
  ReadTimeout: 5000
  # 连接所用的时间,适用于网络正常情况下,两端连接所用的时间
  ConnectTimeout: 5000
logging:
  level:
    # feign日志已什么级别监控哪一个接口
    文件夹名称.接口名名称: debug
OpenFeign是一个声明式的http客户端,是SpringCloud在Eureka公司开源的Feign基础上改造而来,是微服务架构下进行服务间调用的优雅工具,它简化了服务消费者端与服务生产者通信的复杂性,通过声明式客户端接口降低了耦合,并提升了开发效率。其作用是基于SpringMVC的常见注解,帮助简单实现http请求的发送,利用SpringMVC的相关注解来声明参数,然后基于动态代理生成远程调用的代码,无需手动编写[^1][^2]。 在黑马商城的Spring Cloud微服务架构中,OpenFeign用于实现微服务之间的远程调用。在使用OpenFeign进行远程调用时,可将用户信息从一个微服务传递到另一个微服务,以便被调用的微服务能够获取当前用户的相关信息,进而实现基于用户信息的业务逻辑处理,例如根据用户权限获取不同的数据、记录用户相关操作等[^3]。 使用OpenFeign的步骤如下: 1. 引入openfeign的依赖。 2. 配置`application.yml`,示例如下: ```yaml server: port: 80 spring: application: name: member-service-consumer-openfeign eureka: client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://eureka9001.com:9001/eureka,http://eureka9002.com:9002/eureka ``` 3. 配置启动类,示例如下: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication @EnableEurekaClient @EnableFeignClients public class MemberConsumerOpenfeignApplication80 { public static void main(String[] args) { SpringApplication.run(MemberConsumerOpenfeignApplication80.class, args); } } ``` 4. 进行测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值