服务调用之OpenFeign客户端工具使用

一、什么是OpenFeign?

  要理解OpenFeign,先理解Feign。Feign是一个声明式的WebService客户端,她的目标是让编写JavaHttp客户端更加容易。Spring Cloud对Feign进行了封装,使其支持了Spring MNC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。之前的微服务常规调用是通过Ribbon+RestTemplate,在实际开发中,往往一个接口会被多处调用,所以我们需要把微服务调用模块进行封装,形成调用客户端,Feign在此基础上进行了封装,它帮助我们完成对服务提供方的接口绑定,减化使用springcloudRibbon时自行封装调用客户端的开发量,我们只需要创建一个接口,通过在接口上添加注解来完成功能实现(类似Dao接口上使用@Mapper一样)。

  Feign本身集成了Ribbon,实现了客户端的负载均衡,而OpenFeign是SpringCloud在Feign的基础上支持了SpringMVC注解,OpenFeign已经全面替代了Feign。OpenFeign的@FeignClient注解可以解析@RequestMapping注解的接口,动态代理产生实现类,在实现类中做负载均衡并调用微服务。由于OpenFeign的作用是服务调用,因此它使用在服务消费者中,而不是服务提供者中。

二、OpenFeign服务调用

  1、使用OpenFeign首先需要引入jar包,引入方式如下

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

  2、在主启动类中增加@EnableFeignClients注解

  3、书写业务逻辑接口,在接口上增加@FeignClient注解,例如:

@Component
@Feignclient(value = "CLOUD-PAYMENT-SERVICE")   /* value的值为要调用的微服务模块的名称,注意这里不要加http:// */
public interface PaymentFeignservice
{
   GetMapping(value = "/payment/get/{id}")  /* value的值为服务模块具体的控制器方法 */
   public commonResult<Payment> getPaymentById(@Pathvariable("id") Long id);
}

   注意:通常一个微服务就对应一个接口类,接口类中的方法对应微服务对外提供的方法。上面的代码表示调用CLOUD-PAYMENT-SERVICE 服务的/payment/get/id方法。

  4、控制层调用以上封装的接口,完成业务逻辑处理

@Component
public class orderFeigncontroller
{
@Resource
private PaymentFeignservice paymentFeignservice;
  @GetMapping(value = "/consumer/payment/get/{id}")
  public commonResult<Payment> getPaymentById(@Pathvariable("id") Long id)
 {
    return paymentFeignservice.getPaymentById(id);
 }
}

 三、OpenFeign超时控制

  服务调用一定会产生超时的情况,OpenFeign默认等待调用服务接口的超时时间是1秒,超过1秒后就会自己抛出超时错误。有些情况下我们根据需求需要调整超时等待时间,可以在yml配置文件中开启配置,OpenFeign的超时时间设置是由集成的Ribbon来控制的,代码如下

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

四、OpenFeign日志增强管理功能

  Feign提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解服务调用中http请求的细节,它提供了对Feign接口的调用情况进行监控和输出的功能。

  1、日志级别说明:

      NONE-->默认,不显示任何日志

      BASIC-->仅记录请求方法、URL、响应状态码、执行时间

      HEADERS-->BASIC+请求头信息+响应头信息

      FULL-->HEADERS+请求和响应的正文及元数据

  2、配置日志打印功能:新建配置文件夹config,添加配置文件类FeignConfig,导入feign.Logger,写入如下代码

@Configuration
public class Feignconfig
{
   @Bean
   Logger.Level feignLoggerLevel()
  {
     return Logger.Leve1.FULL;  /* 表示开启详细日志 */
  }
}

   3、yml配置文件中,配置日志以什么级别来监控哪个接口(这里的级别不是1中的级别)。如下表示以dubug级别来监控PaymentFeignservice接口

logging:
 level:
    # feign日志以什么级别监控哪个接口
   com.atguigu.springcloud.service.PaymentFeignservice: debug

 

posted @ 2021-10-12 11:53  我若安好,便是晴天  阅读(298)  评论(0编辑  收藏  举报