为什么不再单纯使用 RestTemplate
在之前的微服务开发中,我们常通过 RestTemplate 进行 HTTP 调用。虽然它比原生 HttpClient 方便不少,但在实际项目中仍暴露出一些问题。
public OrderInfo selectOrderById(Integer orderId) {
OrderInfo orderInfo = orderMapper.selectOrderById(orderId);
// 手动拼接 URL,复杂场景下容易出错且可读性差
String url = "http://product-service/product/" + orderInfo.getProductId();
ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);
orderInfo.setProductInfo(productInfo);
return orderInfo;
}
可以看到,URL 拼接不仅臃肿,还缺乏类型安全。微服务通信通常有 RPC 和 HTTP 两种方式,Spring Cloud 默认基于 HTTP,主要实现形式包括 RestTemplate 和 OpenFeign。
RPC(Remote Procedure Call)即远程过程调用,像调用本地方法一样调用远程服务。常见的框架有 Dubbo、Thrift、gRPC 等。
什么是 OpenFeign
OpenFeign 是一个声明式的 Web Service 客户端。它让微服务间的调用变得像调用 Controller 中的 Service 一样简单——只需定义一个接口并添加注解即可。
背景补充
Feign 最初由 Netflix 开源,2016 年捐赠给社区后演变为 OpenFeign。Spring Cloud 对其进行了封装,提供了 spring-cloud-starter-openfeign 依赖。
- 官方文档: OpenFeign
- Spring Cloud 集成: Spring Cloud OpenFeign
快速集成 OpenFeign
引入依赖
首先,在消费方的 pom.xml 中添加以下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign


