赞
踩
官网地址:https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/#spring-cloud-feign
GitHub地址:https://github.com/spring-cloud/spring-cloud-openfeign
本文SpringCloud版本为:
<spring.boot.version>3.1.7</spring.boot.version>
<spring.cloud.version>2022.0.4</spring.cloud.version>
OpenFeign是一个声明性web服务客户端。它使编写web服务客户端变得更容易。使用OpenFeign创建一个接口并对其进行注释。它具有可插入的注释支持,包括OpenFeign注释和JAX-RS注释。OpenFeign还支持可插拔编码器和解码器。
Spring Cloud添加了对Spring MVC注释的支持,以及对使用Spring Web中默认使用的HttpMessageConverter的支持。
Spring Cloud集成了Eureka、Spring Cloud CircuitBreaker以及Spring Cloud LoadBalancer,以便在使用OpenFeign时提供负载平衡的http客户端。
Feign
和 OpenFeign
都是用于微服务架构中的声明式HTTP客户端,它们允许开发者以一种简单且类型安全的方式来定义HTTP API客户端。然而,它们之间存在一些关键性的区别,主要体现在以下方面:
spring-cloud-starter-feign
。spring-cloud-starter-openfeign
。<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
@FeignClient
和@RequestMapping
等,但这些注解的使用方式与Spring MVC的注解有所不同。@GetMapping
, @PostMapping
等,这使得它可以无缝地集成到Spring MVC的框架中。OpenFeign可以看作是Feign的进化版本,它修正了一些Feign的不足,并且更加紧密地集成了Spring Boot和Spring Cloud的特性。如果你正在构建一个新的项目或者你正在使用的Spring Boot版本高于2.0,那么使用OpenFeign会是一个更佳的选择。
<!--openfeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
如下所示,接口上面使用@FeignClient注解并指定了远程服务实例名字。
@FeignClient(value = "cloud-payment-service")
public interface PayFeignApi
{
/**
* 新增一条支付相关流水记录
* @param payDTO
* @return
*/
@PostMapping(value = "/pay/add")
ResultData addPay(@RequestBody PayDTO payDTO);
//...
}
这里使用@EnableFeignClients注解
@SpringBootApplication
@EnableDiscoveryClient //该注解用于向使用consul为注册中心时注册服务
@EnableFeignClients//启用feign客户端,定义服务+绑定接口,以声明式的方法优雅而简单的实现服务调用
public class MainOpenFeign80
{
public static void main(String[] args)
{
SpringApplication.run(MainOpenFeign80.class,args);
}
}
如此即可实现服务实例的远程调用,抛弃了RestTemplate+@LoadBalanced,更加优雅简洁。
默认OpenFeign客户端等待60秒钟,但是服务端处理超过规定时间会导致Feign客户端返回报错。
spring:
cloud:
openfeign:
client:
config:
default:
#连接超时时间
connectTimeout: 3000
#读取超时时间
readTimeout: 3000
如下这里为服务实例cloud-payment-service设置为2秒。
spring: cloud: openfeign: client: config: default: #连接超时时间 connectTimeout: 3000 #读取超时时间 readTimeout: 3000 cloud-payment-service: #连接超时时间 connectTimeout: 20000 #读取超时时间 readTimeout: 20000
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。