Spring Cloud 微服务远程调用:OpenFeign 实战
在微服务架构中,服务间的通信至关重要。之前我们可能习惯用 RestTemplate 处理 HTTP 请求,虽然它比原生 HttpClient 方便不少,但在实际开发中还是暴露出了一些问题。
为什么不再推荐 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 需要手动拼接 URL,灵活性虽高但封装臃肿。一旦 URL 结构复杂,很容易出错,且代码可读性差,风格也不统一。
微服务通信通常有 RPC 和 HTTP 两种方式。Spring Cloud 默认基于 HTTP,实现形式主要有两种:RestTemplate 和 OpenFeign。
RPC 小知识 RPC(Remote Procedure Call)即远程过程调用,通过网络从远程计算机请求服务,无需了解底层网络细节。常见的 RPC 框架有 Dubbo、Thrift、gRPC 等,它们像调用本地方法一样调用远程方法。
OpenFeign 是什么
OpenFeign 是一个声明式的 Web Service 客户端。它让微服务之间的调用变得简单,就像 Controller 调用 Service 一样,只需要创建一个接口并添加注解即可。
背景与版本
Feign 最初由 Netflix 开源,2013 年发布首个版本,2016 年捐赠给社区后更名为 OpenFeign。Spring Cloud Feign 是 Spring 对 Feign 的封装,集成到 Spring Cloud 生态系统中。
由于原 Feign 项目已停止维护,我们现在使用的依赖通常是 spring-cloud-starter-openfeign。
- OpenFeign 官方文档:https://github.com/OpenFeign/feign
- Spring Cloud OpenFeign 官方文档:https://spring.io/projects/spring-cloud-openfeign
快速上手
1. 引入依赖
在消费方的 pom.xml 中添加以下依赖:
<dependency>
<>org.springframework.cloud
spring-cloud-starter-openfeign


