当前位置: 首页 > article >正文

微服务学习-OpenFeign 简化服务间调用

使用 OpenFeign 简化服务间调用

1. 作用

服务间的远程调用,比如通过 OpenFeign 可以实现订单服务调用远程的库存服务

已经有了 LoadBalancer 为什么还要用 OpenFeign?

在微服务架构中,LoadBalancer 和 OpenFeign 虽然都提供服务间调用的能力,但它们的设计目的和使用场景有所不同。

LoadBalancer 主要关注服务间的负载均衡,它可以帮助客户端在多个服务实例之间分配请求,以实现高可用性和性能优化。

OpenFeign 提供了一种声明式的 Web 服务客户端编程模型,它使得编写服务间调用的代码更加简洁和直观。

2. OpenFeign 是什么?

官网文档:Spring Cloud OpenFeign

OpenFeign 是 Spring Cloud 框架中集成声明式 HTTP客户端工具。

OpenFeign 可以让远程调用服务达到像本地调用方法一样的体验。

Feign 是 Netflix 开发的声明式、模板化的 HTTP 客户端,Feign 可帮助我们更加便捷、优雅地调用 HTTP API。Feign 可以做到使用 HTTP 请求远程服务时就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个 HTTP 请求。

//本地调用
Result<?> result = orderService.findOrderByUserId(id);
//openFeign远程调用 orderService为代理对象
Result<?> result = orderService.findOrderByUserId(id);

Spring Cloud OpenFeign 对 Feign 进行了增强,使其支持 Spring MVC 注解,从而使得 Feign 的使用更加方便。

3. 如何使用 OpenFeign ?

OpenFeign 在服务调用(消费)端使用,比如订单服务使用 OpenFeign 调用商品、库存、账户等服务。

3.1. 引入依赖

订单服务的 pom.xml 引入 OpenFeign 的依赖。

<!-- openfeign 远程调用 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
3.2. 在订单服务启动类上添加 @EnableFeignClients 注解,开启 OpenFeign 功能。
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class OrderApplication {
  
  
3.3. 编写 OpenFeign 客户端,调用商品、库存、账户微服务。
@FeignClient(name = "icoolkj-mall-account", path = "/api/account")
public interface AccountServiceFeignClient {

    @PostMapping("/reduce-balance")
    public Result<?> reduceBalance(@RequestBody AccountRequest accountRequest);

}


@FeignClient(name = "icoolkj-mall-inventory", path = "/api/inventory")
public interface InventoryServiceFeignClient {

    @PostMapping("/reduce-inventory")
    public Result<?> reduceInventory(@RequestBody InventoryRequest inventoryRequest);
}


@FeignClient(name = "icoolkj-mall-product", path = "/api/product")
public interface ProductServiceFeignClient {

    @GetMapping("/get-price-product")
    public Result<?> getPriceProduct(@RequestParam("productId") Long productId);

}
3.4. 订单服务发起调用,像调用本地方式一样远程调用商品、库存、账户服务。
@Autowired
private AccountServiceFeignClient accountServiceFeignClient;

@Autowired
private ProductServiceFeignClient productServiceFeignClient;

@Autowired
private InventoryServiceFeignClient inventoryServiceFeignClient;

//OpenFeign 远程调用库存服务
int inventoryCode = inventoryServiceFeignClient.reduceInventory(inventoryRequest).getCode();

 //OpenFeign 远程调用商品服务
Result<ProductResponse> result = productServiceFeignClient.getPriceProduct(productId);

//OpenFeign 远程调用账户服务
Integer accountCode = accountServiceFeignClient.reduceBalance(accountRequest).getCode();
3.5. 重启订单服务,测试
3.5.1. Nacos 控制台查看服务注册情况
3.5.2. 下单,查看是否扣减库存,观察多个库存服务,是否都存在调用

4. 小结

通过 OpenFegin 可以实现微服务之间的远程调用。


http://www.kler.cn/a/510652.html

相关文章:

  • HarmonyOS应用开发-低代码开发登录页面(超详细)
  • 【前端】CSS学习笔记
  • 计算机网络 (49)网络安全问题概述
  • 为AI聊天工具添加一个知识系统 之48 蒙板程序设计(第二版):Respect九宫格【社会形态:治理】
  • 彻底讲清楚 单体架构、集群架构、分布式架构及扩展架构
  • HTML应用指南:利用GET请求获取全国特斯拉充电桩位置
  • 【第二十周】U-Net:用于生物图像分割的卷积神经网络
  • ARM GCC编译器
  • LeRobot安装教程
  • [实现Rpc] 环境搭建 | JsonCpp | Mudou库 | callBack()
  • VUE学习笔记(入门)17__小黑记事本综合案例
  • Oracle 深入学习 Part12: Managing Indexes (管理索引)
  • A Dual-Module Denoising Approach 解读
  • ES6是什么
  • Agentic AI 和 AI Agent 之间的区别(ChatGPT回答)
  • 【2024年华为OD机试】(B卷,100分)- 计算最接近的数 (Java JS PythonC/C++)
  • 【专题二 二叉树中的深搜】230. 二叉搜索树中第K小的元素
  • 微软宣布Win11 24H2进入新阶段!设备将自动下载更新
  • pycharm python pyqt5
  • 豪越科技消防一体化安全管控平台:推动消防作训模式智慧转型
  • Liunx搭建KVM私有虚拟主机
  • MarsCode青训营打卡Day6(2025年1月19日)|稀土掘金-360.可被K整除的子数组问题
  • postcss插件-实现vw适配
  • C#,入门教程(02)—— Visual Studio 2022开发环境搭建图文教程
  • 寒假1.19
  • 国产编辑器EverEdit - 合并行