Spring Cloud Feign组件如何实现服务间调用?

2026-05-21 03:463阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计848个文字,预计阅读时间需要4分钟。

Spring Cloud Feign组件如何实现服务间调用?

概述:Feign是Netflix开源的一个声明式的Http客户端,旨在简化Web Service基于Http的远程调用。它的目的是让Web Service的调用变得更加简单。Feign提供了HTTP请求的模板,通过编写简单的接口和注解,就可以实现远程调用。

概述

Feign 是Netflix开源的一个声明式的Http 客户端,它的目的就是让Web Service基于Http的远程调用变得更加简单。 Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。而Feign则会完全代理HTTP请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。Feign 默认集成了 Ribbon,Nacos 也很好的兼容了 Feign,默认实现了负载均衡的效果。

  • Feign 采用的是基于接口的注解
  • Feign 整合了 ribbon

快速入门

1、引入maven依赖:

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.10.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-blog.csdn.net/u012702547/article/details/78261306

Spring Cloud Feign组件如何实现服务间调用?

创建一个基础的Maven工程,定义Controller接口写好SpringMvc注解,由服务提供方和服务消费方通过引入基础Maven工程,分别继承Controller接口,Feign继承特性方式用起来确实很方面,但是也带来一个问题,就是服务提供者和服务消费者的耦合度太高,此时如果服务提供者修改了一个接口的定义,服务消费者可能也得跟着变化,进而带来很多未知的工作量,因此小伙伴们在使用继承特性的时候,要慎重考虑。

Feign脱离Ribbon的使用

@FeignClient(name="baidu",url= "www.baidu.com") public interface BaiduFeignClient { @GetMapping("") public string index(); }

Feign调用yibo.com/order-center/openapi", configuration = FeignConfiguration.class) public interface OrderFeign { @PostMapping("/order") ResultBody<List<HouseDO>> queryHouseList(OrderQuery query); }

方案二——改写RestTemplate

@Bean public RestTemplate getRestTemplate() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException { SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { @Override public boolean isTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { return true; } }).build(); SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext, new String[]{"TLSv1.2"}, null, NoopHostnameVerifier.INSTANCE); CloseableHttpClient yibo.com/order-center/openapi") public interface OrderFeign { @PostMapping("/order") ResultBody<List<HouseDO>> queryHouseList(OrderQuery query); }

RestTemplate VS Feign

尽量使用Feign,尽量杜绝使用RestTemplate

角度 RestTemplate Feign 可读性、可维护性 一般 极佳 开发体验 欠佳 极佳 性能 很好 中等(RestTemplate性能的50%左右) 灵活性 极佳 中等(内置功能可满足绝大多数需求)

Open Feign数据压缩功能

  • Spring Cloud Feign支持对请求和响应进行数据压缩(默认采用 gzip 压缩),以此来提高通信效率。

  • 如果在服务间单次传输的数据超过1K字节,强烈推荐开启数据压缩功能。

feign: compression: request: enabled: true # 开启请求的数据压缩 mime-types: text/xml,application/xml,application/json # 配置压缩支持的MIME TYPE min-request-size: 1024 # 配置压缩数据大小的下限,当传输的数据类型大于 1024 时,才会进行压缩 response: enabled: true # 配置响应GZIP压缩

Feign的性能优化

1、为Feign配置连接池,性能提升15%

Feign通过jdk中的HttpURLConnection向下游服务发起user-center/users/{id}", HttpMethod.GET, new HttpEntity<>(www.cnblogs.com/zhangbing0615/articles/9238311.html

本文共计848个文字,预计阅读时间需要4分钟。

Spring Cloud Feign组件如何实现服务间调用?

概述:Feign是Netflix开源的一个声明式的Http客户端,旨在简化Web Service基于Http的远程调用。它的目的是让Web Service的调用变得更加简单。Feign提供了HTTP请求的模板,通过编写简单的接口和注解,就可以实现远程调用。

概述

Feign 是Netflix开源的一个声明式的Http 客户端,它的目的就是让Web Service基于Http的远程调用变得更加简单。 Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。而Feign则会完全代理HTTP请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。Feign 默认集成了 Ribbon,Nacos 也很好的兼容了 Feign,默认实现了负载均衡的效果。

  • Feign 采用的是基于接口的注解
  • Feign 整合了 ribbon

快速入门

1、引入maven依赖:

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.10.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-blog.csdn.net/u012702547/article/details/78261306

Spring Cloud Feign组件如何实现服务间调用?

创建一个基础的Maven工程,定义Controller接口写好SpringMvc注解,由服务提供方和服务消费方通过引入基础Maven工程,分别继承Controller接口,Feign继承特性方式用起来确实很方面,但是也带来一个问题,就是服务提供者和服务消费者的耦合度太高,此时如果服务提供者修改了一个接口的定义,服务消费者可能也得跟着变化,进而带来很多未知的工作量,因此小伙伴们在使用继承特性的时候,要慎重考虑。

Feign脱离Ribbon的使用

@FeignClient(name="baidu",url= "www.baidu.com") public interface BaiduFeignClient { @GetMapping("") public string index(); }

Feign调用yibo.com/order-center/openapi", configuration = FeignConfiguration.class) public interface OrderFeign { @PostMapping("/order") ResultBody<List<HouseDO>> queryHouseList(OrderQuery query); }

方案二——改写RestTemplate

@Bean public RestTemplate getRestTemplate() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException { SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { @Override public boolean isTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { return true; } }).build(); SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext, new String[]{"TLSv1.2"}, null, NoopHostnameVerifier.INSTANCE); CloseableHttpClient yibo.com/order-center/openapi") public interface OrderFeign { @PostMapping("/order") ResultBody<List<HouseDO>> queryHouseList(OrderQuery query); }

RestTemplate VS Feign

尽量使用Feign,尽量杜绝使用RestTemplate

角度 RestTemplate Feign 可读性、可维护性 一般 极佳 开发体验 欠佳 极佳 性能 很好 中等(RestTemplate性能的50%左右) 灵活性 极佳 中等(内置功能可满足绝大多数需求)

Open Feign数据压缩功能

  • Spring Cloud Feign支持对请求和响应进行数据压缩(默认采用 gzip 压缩),以此来提高通信效率。

  • 如果在服务间单次传输的数据超过1K字节,强烈推荐开启数据压缩功能。

feign: compression: request: enabled: true # 开启请求的数据压缩 mime-types: text/xml,application/xml,application/json # 配置压缩支持的MIME TYPE min-request-size: 1024 # 配置压缩数据大小的下限,当传输的数据类型大于 1024 时,才会进行压缩 response: enabled: true # 配置响应GZIP压缩

Feign的性能优化

1、为Feign配置连接池,性能提升15%

Feign通过jdk中的HttpURLConnection向下游服务发起user-center/users/{id}", HttpMethod.GET, new HttpEntity<>(www.cnblogs.com/zhangbing0615/articles/9238311.html