一、RestTemplate 存在问题
在微服务架构中,服务间通信通常采用 HTTP 或 RPC。Spring Cloud 默认基于 HTTP,常见的实现方式有 RestTemplate 和 OpenFeign。
回顾之前使用 RestTemplate 的代码:
public OrderInfo selectOrderById(Integer orderId) {
OrderInfo orderInfo = orderMapper.selectOrderById(orderId);
String url = "http://product-service/product/" + orderInfo.getProductId();
ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);
orderInfo.setProductInfo(productInfo);
return orderInfo;
}
虽然 RestTemplate 对 HTTP 进行了封装,比直接使用 HttpClient 方便,但仍存在明显短板:需要手动拼接 URL,灵活性虽高但代码臃肿,URL 复杂时容易出错,且风格难以统一,可读性较差。
补充说明:RPC(Remote Procedure Call)远程过程调用允许像调用本地方法一样调用远程方法,常见框架包括 Dubbo、Thrift 和 gRPC。但在 Spring Cloud 生态中,HTTP 依然是主流选择。
二、OpenFeign 介绍
OpenFeign 是一个声明式的 Web Service 客户端,它让微服务之间的调用变得像 Controller 调用 Service 一样简单。只需创建一个接口并添加注解即可。
历史背景:Feign 最初由 Netflix 开源,2016 年捐赠给社区后演变为 OpenFeign。Spring Cloud 对其进行了封装,提供了 spring-cloud-starter-openfeign 依赖。
- 官方文档:OpenFeign
- Spring Cloud 文档:Spring Cloud OpenFeign
三、快速上手
3.1 引入依赖
在消费方项目的 pom.xml 中添加:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign


