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

devtools/2025/1/22 22:41:14/

使用 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.ppmy.cn/devtools/152708.html

相关文章

C# 控制打印机:从入门到实践

在开发一些涉及打印功能的应用程序时&#xff0c;使用 C# 控制打印机是一项很实用的技能。这篇文章就来详细介绍下如何在 C# 中实现对打印机的控制。 一、准备工作 安装相关库&#xff1a;在 C# 中操作打印机&#xff0c;我们可以借助System.Drawing.Printing命名空间&#x…

备赛蓝桥杯之第十五届职业院校组省赛第一题:智能停车系统

提示&#xff1a;本篇文章仅仅是作者自己目前在备赛蓝桥杯中&#xff0c;自己学习与刷题的学习笔记&#xff0c;写的不好&#xff0c;欢迎大家批评与建议 由于个别题目代码量与题目量偏大&#xff0c;请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…

IDEA构建JavaWeb项目,并通过Tomcat成功运行

目录 一、Tomcat简介 二、Tomcat安装步骤 1.选择分支下载 2.点击下载zip安装包 3.解压到没有中文、空格和特殊字符的目录下 4.双击bin目录下的startup.bat脚本启动Tomcat 5.浏览器访问Tomcat 6.关闭Tomcat服务器 三、Tomcat目录介绍 四、WEB项目的标准结构 五、WEB…

跨站脚本攻击(XSS)原理及防护方案

跨站脚本攻击&#xff08;XSS&#xff0c;Cross-Site Scripting&#xff09;是一种常见的网络安全漏洞&#xff0c;攻击者通过在网页中注入恶意脚本&#xff0c;使其在用户的浏览器中执行。XSS攻击可以窃取用户的敏感信息&#xff0c;如cookies、会话令牌等&#xff0c;甚至可以…

基于STM32单片机火灾安全监测一氧化碳火灾

功能描述 0. STM32单片机为控制核心 1. 液晶显示当前温湿度和CO浓度等信息 2. 温湿度传感器检测当前环境温湿度 3. 火焰传感器检测是否发生明火 4. 一氧化碳传感器检测一氧化碳浓度 5. 功能按键可以设置加减和参数阈值&#xff0c;超过阈值蜂鸣器进行报警 6. 当发…

简述mysql 主从复制原理及其工作过程,配置一主两从并验证

第一种基于binlog的主从同步 首先对主库进行配置&#xff1a; [rootopenEuler-1 ~]# vim /etc/my.cnf 启动服务 [rootopenEuler-1 ~]# systemctl enable --now mysqld 主库的配置 从库的配置 第一个从库 [rootopenEuler-1 ~]# vim /etc/my.cnf [rootopenEuler-1 ~]# sys…

规避路由冲突

路由冲突是指在网络中存在两个或多个路由器在进行路由选择时出现矛盾&#xff0c;导致网络数据包无法正确传输&#xff0c;影响网络的正常运行。为了规避路由冲突&#xff0c;可以采取以下措施&#xff1a; 一、合理规划IP地址 分配唯一IP&#xff1a;确保每个设备在网络中都有…

redis 分布式方案

文章目录 前言一、主从复制1、主从配置2、建立连接3、数据同步3.1、全量同步3.2、全量同步配置3.3、 增量同步3.4、 增量同步配置 二、redis sentinel1、主要功能2、sentinel配置3、高可用3.1、故障发现3.2、故障转移3.2.1、选举sentinel进行故障转移3.2.2、选举从节点升级成主…