OpenFeign 是一个声明式的 Web 服务客户端,可以帮助我们更加方便地调用 RESTful API。它通过简单的注解配置,可以让我们像调用本地方法一样调用远程服务,非常适合微服务架构下的应用。它让微服务之间的调⽤变得更简单, 类似controller 调⽤service, 只需要创建⼀个接⼝,然后添加注解即可使⽤OpenFeign.
OpenFeign官方文档:https://github.com/OpenFeign/feign
1. 引入依赖
在订单服务下添加依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2. 添加注解
在 订单服务(客户端)的Spring Boot 应用程序的启动类上添加 @EnableFeignClients
注解,以启用 Feign
3. 定义Feign客户端
通过接口和注解定义远程调用的方法,在订单服务下创建一个接口类,来完成和商品服务中的接口“对接”。
import com.guan.product.model.ProductInfo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(value = "product-service")
public interface ProductApi {
@RequestMapping("/product/{productId}")
ProductInfo getProductInfo(@PathVariable("productId") Integer productId);
}
4. 使用Feign客户端
在应用中,你可以直接注入并使用 Feign 客户端,就像调用本地接口一样丝滑。
@Service
public class OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private RestTemplate restTemplate;
@Autowired
private ProductApi productApi;
public OrderInfo selectOrderByID(Integer orderID){
OrderInfo orderInfo = orderMapper.selectOrderById(orderID);
ProductInfo productInfo = productApi.getProductInfo(orderInfo.getProductId());
orderInfo.setProductInfo(productInfo);
return orderInfo;
}
}
访问:http://127.0.0.1:8080/order/1
订单信息中成功查询到商品的详细信息。
5. 总结
使用openFeign,首先需要引入所需要的依赖(spring-cloud-starter-openfeign);然后在启动类上添加@EnableFeignClients注解;接着在客户端定义接口类(Feign客户端),接口和服务端的提供的服务接口相对应;最后就可以使用Feign,注入客户端后就可以像调用本地方法一样调用远程服务的接口了。