SpringCloud-OpenFeign服务接口调用

本文介绍Feign和OpenFeign的原理及使用方法,包括如何通过声明式接口简化HTTP客户端开发,集成Ribbon实现负载均衡,以及OpenFeign的日志配置与超时控制等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

是什么

  • Github
  • Feign是一个声明式WebService客户端,使用Feign能够让编写Web Service变得简单
  • 其使用方法是定义一个服务接口然后在上面添加注解,Feign也支持可插拔式的编码器和解码器。Spring Cloud对Feign进行了封装使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Rureka和Ribbon组合使用支持负载均衡
  • 只需要创建一个接口,然后添加一个注解

能干啥

  • Feign旨在使编写Java Http客户端更加容易
  • 前面在使用Ribbon+RestTemplate时,利用RestTemplate对Http请求封装,形成了模板化的调用方法。
  • 实际开发中对服务依赖的调用可能不止一处,往往一个接口会被多初调用,所以通常都会针对每个微服务自行封装一些客户端来包装这些依赖服务的调用。所以Feign在此基础上做了进一步的封装,由他来帮助我们定义和实现依赖服务接口的定义。在Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置它(以前时Dao接口上面标注Mapper注解,现在是一个微服务接口上边标注一个Feign注解即可),即可完成服务提供方的接口绑定,简化了使用Spring cloud Ribbon时,自动封装服务调用客户端的开发量。

Feign集成了Ribbon

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

Feign和openFeign

在这里插入图片描述

OpenFeign使用

新建cloud-consumer-feign-order80
写pom

 <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-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hsw.cloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

写yml

server:
  port: 80
eureka:
  client:
    register-with-eureka: false
    fetch-registry: true
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka

主启动
在这里插入图片描述
编写业务类

  • 业务逻辑接口+@FeignClient配置调用provider服务
  • 新建PaymentFeignService接口并新增注解@FeignClient
    在这里插入图片描述

在这里插入图片描述
总结
在这里插入图片描述

OpenFeign超时控制

  • 先停掉8002
  • 服务提供方8001故意写暂停程序
    在这里插入图片描述
  • 服务消费方80添加超时方法PaymentFeignService

在这里插入图片描述

  • 服务消费方80添加超时方法OrderFeignController
    在这里插入图片描述

  • 测试

在这里插入图片描述

默认Feign客户端只等待1s,但是服务端处理需要超过1s,导致Feign直接返回报错,为了避免这种情况需要设置Feign的超时时间,在yml中开启

由于Feign的底层也是使用Ribbon做负载均衡所以yml的配置如下
在这里插入图片描述

OpenFeign日志打印功能

  • 对Feign的调用情况进行监控和输出
  • 日志级别如下
    在这里插入图片描述- 配置bean
    在这里插入图片描述- 日志输出
    在这里插入图片描述

小结

服务注册中心

  • Eureka
  • Zookeeper
  • Consul
  • Nacos

服务调用

  • Ribbon
  • LoadBalancer
  • Feign
  • OpenFeign

服务降级

  • Hystrix
  • resilience4j
  • sentinel
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值