Spring Cloud Feign组件如何实现服务间调用?
- 内容介绍
- 文章标签
- 相关推荐
本文共计848个文字,预计阅读时间需要4分钟。
概述: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创建一个基础的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的性能优化
1、为Feign配置连接池,性能提升15%
Feign通过jdk中的HttpURLConnection向下游服务发起user-center/users/{id}", HttpMethod.GET, new HttpEntity<>(www.cnblogs.com/zhangbing0615/articles/9238311.html
本文共计848个文字,预计阅读时间需要4分钟。
概述: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创建一个基础的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的性能优化
1、为Feign配置连接池,性能提升15%
Feign通过jdk中的HttpURLConnection向下游服务发起user-center/users/{id}", HttpMethod.GET, new HttpEntity<>(www.cnblogs.com/zhangbing0615/articles/9238311.html

