OpenFeign--简化远程调用

OpenFeign–简化远程调用

1. 如何使用

步骤

  1. 引入依赖,包括OpenFeign和负载均衡组件SpringCloudLoadBalancer
1
2
3
4
5
6
7
8
9
10
11
<!--OpenFeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--负载均衡-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- 以前用的是Ribbon>
  1. 通过 @EnableFeignClients注解,启用OpenFeign功能
1
2
3
@EnableFeignClients
@SpringBootApplication
public class CartApplication { // ... 略 }

OpenFeign已经被SpringCloud自动装配,实现起来非常简单
3. 编写FeignClient(这其实是一个接口)

1
2
3
4
5
@FeignClient(value = "item-service")
public interface ItemClient {
@GetMapping("/items")
List<ItemDTO> queryItemByIds(@RequestParam("ids") Collection<Long> ids);
}
  1. 使用FeignClient,实现远程调用
1
List<ItemDTO> items = itemClient.queryItemByIds(List.of(1,2,3));

OpenFegn固然方便快捷丝滑,但是:
底层发起http请求用的是jdk默认的HttpURLConnection,每次请求都会重新创建连接,慢,所以可以依赖其他的框架:

  • HttpURLConnection: 默认,不支持连接池
  • Apache HttpClient 支持连接池
  • OKHttp: 支持连接池
    这里我选泽的是OKHttp

步骤如下:

  1. 引入依赖
1
2
3
4
5
<!--ok-http-->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</dependency>
  1. 开启连接池功能
1
2
3
feign:
okhttp:
enabled: true #开启OKHttp连接池支持

这样配置之后,就可以提高性能