Spring Cloud RPC

本文将介绍 Spring Cloud 对 RPC 的支持。

一、RPC

具体请看:

分布式 RPC

二、OpenFeign

1. 什么是 OpenFeign?

OpenFeign 是 Spring Cloud 下的组件,其作用是简化远程方法调用,将 HTTP 形式的 Restful API 的调用简化为 RPC。

2. 原理

  • 在项目启动时,扫描所有被 @FeignClient 修饰的接口
  • 针对每一个接口,解析 @FeignClient 和接口中方法的注解,生成动态代理对象
  • 将动态代理对象注册为 Bean
  • 调用处只需要注入接口对应的 Bean,调用方法时,请求将由动态代理对象接管

3. 示例

(1) 添加依赖

1
2
3
4
5
<!-- OpenFeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

(2) 编写远程方法接口

1
2
3
4
5
6
7
@FeignClient(value = "Mall-Order", path = "/order")
public interface OrderService {

@PostMapping("/list")
List<Order> list();

}

其中,

  • @FeignClient 注解用于声明该接口是远程方法接口
    • value 属性用于指定服务名
    • path 属性用于指定统一前置路径
  • @PostMapping 注解用于请求的具体路径

(3) 配置超时时间

配置超时时间,一旦超时,将自动取消请求并返回异常,

1
2
3
4
5
6
7
8
9
feign:
client:
config:
# 全局超时配置
default:
# 网络连接阶段超时时间
connectTimeout: 1000
# 请求响应阶段超时时间
readTimeout: 5000

(4) 调用

在需要进行远程方法调用的类中,注入远程方法接口对应的 Bean,直接像调用本地方法一样调用即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
@RestController
@RequestMapping("/order")
public class OrderController {

@Resource
OrderService orderService;

@PostMapping("/list")
public List<Order> list() {
return orderService.list();
}

}

参考

  • Spring Cloud 微服务项目实战