SpringCloud服务接口调用OpenFeign及使用详解

 更新时间:2023年04月01日 10:39:09   作者:贼爱学习的小黄  
这篇文章主要介绍了SpringCloud服务接口调用——OpenFeign,在学习Ribbon时,服务间调用使用的是RestTemplate+Ribbon实现,而Feign在此基础上继续进行了封装,使服务间调用变得更加方便,需要的朋友可以参考下

OpenFeign简介

Feign是一个声明式的Web服务客户端,让编写Web服务客户端变得非常容易,只需创建一个接口并在接口上添加注解即可。

在学习Ribbon时,服务间调用使用的是RestTemplate+Ribbon实现,而Feign在此基础上继续进行了封装,使服务间调用变得更加方便。

而OpenFeign可以理解为Feign的升级版。

OpenFeign使用

OpenFeign应用在消费端,服务端不需要做任何改变

创建一个新的消费端cloud-consumer-feign-order80,首先引入相关依赖,引入OpenFeign以后,可以看到OpenFeign内置了Ribbon,所以他底层实现负载均衡还是依赖于Ribbon


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

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>

    <dependency>
        <groupId>com.yellowstar.springcloud</groupId>
        <artifactId>cloud-api-commons</artifactId>
        <version>1.0-SNAPSHOT</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>

编写配置文件

server.port=80

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

在启动类上添加如下注解

@EnableFeignClients

对于OpenFeign来说,服务间的调用需要在消费端创建一个接口,这个接口类似于服务端

@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService {
    @GetMapping("/payment/get/{id}")
    CommonResult<Payment> getPayment(@PathVariable("id") int id);
}

OpenFeign超时控制

默认情况下,OpenFeign调用方法,会给该方法一秒钟的执行时间,如果一秒钟之后没有执行完方法,则直接报错。而OpenFeign底层调用的Ribbon,也就是说我们需要设置Ribbon服务间调用的等待时间

#指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
ribbon.ReadTimeout=5000l
#指的是建立连接后从服务器读取到可用资源所用的时间
ribbon.ConnectTimeout=5000

如果不设置,会报一下错误

OpenFeign日志

OpenFeign在调用http请求时,可以将请求的日志完整的打印出来,有以下几种日志级别,默认是无日志。

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

首先需要对Feign的日志级别进行配置

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

添加配置文件

# feign日志以什么级别监控哪个接口
logging.level.com.yellowstar.springcloud.service.PaymentFeignService=debug

接下来就可以观察http请求的完整信息了

到此这篇关于SpringCloud服务接口调用——OpenFeign的文章就介绍到这了,更多相关SpringCloud OpenFeign服务调用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java读取txt文件内容简单举例

    java读取txt文件内容简单举例

    这篇文章主要给大家介绍了关于java读取txt文件内容简单举例的相关资料,通常我们可以直接通过文件流来读取txt文件的内容,文中给出了详细的代码示例,需要的朋友可以参考下
    2023-07-07
  • finally 一定会执行(实例代码)

    finally 一定会执行(实例代码)

    下面小编就为大家带来一篇finally 一定会执行(实例代码)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • SpringDataJPA之Specification复杂查询实战

    SpringDataJPA之Specification复杂查询实战

    这篇文章主要介绍了SpringDataJPA之Specification复杂查询实战,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • 详解在Spring中如何使用AspectJ来实现AOP

    详解在Spring中如何使用AspectJ来实现AOP

    这篇文章主要介绍了详解在Spring中如何使用AspectJ来实现AOP,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Java实现浏览器端大文件分片上传

    Java实现浏览器端大文件分片上传

    本文主要介绍了Java实现浏览器端大文件分片上传,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Java进阶:Struts多模块的技巧

    Java进阶:Struts多模块的技巧

    Java进阶:Struts多模块的技巧...
    2006-12-12
  • Spring之借助Redis设计一个简单访问计数器的示例

    Spring之借助Redis设计一个简单访问计数器的示例

    本篇文章主要介绍了Spring之借助Redis设计一个简单访问计数器的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • java使用PageInfo的list通用分页处理demo

    java使用PageInfo的list通用分页处理demo

    这篇文章主要为大家介绍了java使用PageInfo的list通用分页处理demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2023-12-12
  • Java连接MQ实现信息查询的操作过程

    Java连接MQ实现信息查询的操作过程

    本文介绍了如何使用Java连接ApacheRocketMQ实现信息查询的功能,通过编写Java代码连接MQ并实现生产者发送消息和消费者接收并处理消息的过程,展示了如何在分布式系统中实现订单处理系统的解耦,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • Java对世界不同时区timezone之间时间转换的处理方法

    Java对世界不同时区timezone之间时间转换的处理方法

    这篇文章主要介绍了Java对世界不同时区timezone之间时间转换的处理方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07

最新评论