RestTemplate 的局限
在微服务架构中,服务间通信通常采用 HTTP 或 RPC。Spring Cloud 默认基于 HTTP,RestTemplate 曾是主流选择。但观察典型代码会发现,手动拼接 URL 不仅繁琐,且复杂场景下极易出错,可读性也较差。
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;
}
这种写法虽然封装了 HTTP 细节,但缺乏统一风格,维护成本高。OpenFeign 正是为了解决这些问题而生。
OpenFeign 简介
OpenFeign 是一个声明式的 Web Service 客户端。它让微服务间的调用变得像本地方法调用一样简单:只需定义一个接口并添加注解,底层会自动处理负载均衡、序列化及异常处理。
Feign 最初由 Netflix 开源,2016 年捐赠给社区后演变为 OpenFeign。Spring Cloud 对其进行了深度集成,提供了 spring-cloud-starter-openfeign 依赖。
快速上手
引入依赖
在消费方服务的 pom.xml 中添加:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
开启功能
在启动类上添加 @EnableFeignClients 注解,激活 Feign 扫描机制。
@EnableFeignClients
@SpringBootApplication
public class OrderServiceApplication {
{
SpringApplication.run(OrderServiceApplication.class, args);
}
}


