OpenFeign

OpenFeign

 

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

 

他的使用方法是定义一个服务接口,然后在上面添加注解。Feign也支持可插拔式的编码和解码器。Spring  Cloud 对Feign进行了封装,使其支持Spring MVC 标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。https://spring.io/projects/spring-cloud-openfeign

 

 Feign能干什么?

 

Feign使编写java Http客户端更加容易

 

前面使用Ribbon + RestTemplate时,利用RestTemplate对Http请求的封装处理,形成了一套模板化的调用方法,但是在实际的开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多次调用。所以Feign在此基础上做了进一步的封装,由他来帮助我们定义和实现依赖服务接口。在Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),即可完成对服务提供方的接口绑定,简化了使用Spring Cloud Ribbon,自动封装服务调用客户端的工作量。

Feign集成了Ribbon

  Ribbon维护了服务列表信息,并且通过轮询的方式实现客户端的负载均衡。而与Ribbon不同的是,通过Feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务的调用。

Feign 与OpenFeign的区别?

Feign

OpenFeign

Feign是Spring Cloud组件中的一个轻量级RestFul的Http服务客户端Feign内置了Ribbon,用来做客户端的负载均衡,去调用服务注册中心的服务。Feign的使用方式是:使用Feign的注解定义接口,调用这个接口就可以调用服务注册中心的服务。

OpenFeign是Spring Cloud在feign的基础上支持了SpringMvc的注解,如@RequestMapping等等

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

<dependency>

<groupId>org.springframework.cloud</ groupId >

<artifactId>spring-cloud-starter-feign</ artifactId>

</ dependency >

<dependency>

<groupId>org.springframework.cloud</ groupId >

<artifactId>spring-cloud-starter-openfeign</artifactId>

</ dependency >

 

OpenFeign的使用步骤:

接口加注解:微服务调用接口 + @FeignClient

OpenFeign

 

 

 

主启动类:添加@EnableFeignClients

OpenFeign

 

 

 

OpenFeign默认的等待时间1秒钟,超时后将报错(修改Yml):

server:
  port: 80

eureka:
  client:
    register-with-eureka: true
    service-url:
     defaultZone: defaultZone:http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka

spring:
  application:
    name: feign-customer-order

  # 设置feign客户端超时时间(openFeign默认支持Ribbon)
ribbon:
  # 建立连接后从服务器读取到可用资源的时间
  ReadTimeout: 5000
  # 建立连接所用的时间,适用于网络正常的情况下,两端连接所用的时间
  ConnectTimeout: 5000

 

配置OpenFeign的日志级别:

1:新建config配置文件

package com.dw.springcloud.config;

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

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

2:修改yml:

server:
  port: 80

eureka:
  client:
    register-with-eureka: true
    service-url:
     defaultZone: defaultZone:http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka

spring:
  application:
    name: feign-customer-order

  # 设置feign客户端超时时间(openFeign默认支持Ribbon)
ribbon:
  # 建立连接后从服务器读取到可用资源的时间
  ReadTimeout: 50000
  # 建立连接所用的时间,适用于网络正常的情况下,两端连接所用的时间
  ConnectTimeout: 50000

logging:
  level:
  # feign以什么级别监控哪个接口
   com.dw.springcloud.service.PaymentFeignService: debug

 

上一篇:填坑系列之OpenFeign


下一篇:一、hystrix如何集成在openfeign中使用