spring cloud微服务-OpenFeign的使用
OpenFeign的使用
openFeign的作用是服务间的远程调用 ,比如通过OpenFeign可以实现调用远程服务。
已经有了LoadBalancer为什么还要用openFeign?
- 在微服务架构中,LoadBalancer和OpenFeign虽然都提供了服务间调用的能力,但它们的设计目的和使用场景有所不同。
- LoadBalancer主要关注于服务间的负载均衡,它可以帮助客户端在多个服务实例之间分配请求,以实现高可用性和性能优化。
- 而OpenFeign则提供了一种声明式的Web服务客户端编程模型,它使得编写服务间调用的代码更加简洁和直观。
OpenFeign到底是什么?
官方文档地址,https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/。
OpenFeign是Spring cloud框架中集成的声明式HTTP客户端工具。
OpenFeign可以让远程调用服务达到像本地调用方法一样的体验。
OpenFeign怎么用?
OpenFeign在服务消费端使用,比如某个服务使用OpenFeign调用其它服务
1.引入依赖,在项目 的pom文件添加:
<!-- openfeign 远程调用 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.在项目启动类上添加@EnableFeignClients注解,开启openFeign功能
@EnableFeignClients
@SpringBootApplication
@EnableDiscoveryClient
public class TlmallOrderApplication {
3.编写OpenFeign客户端,调用其它微服务
@FeignClient(name = "tlmall-storage")
public interface StorageServiceFeignClient {@PostMapping("/storage/reduce-stock")Result<?> reduceStock(@RequestBody StorageDTO productReduceStockDTO);}@FeignClient(name = "tlmall-account")
public interface AccountServiceFeignClient {@PostMapping("/account/reduce-balance")Result<?> reduceBalance(@RequestBody AccountDTO accountReduceBalanceDTO);}
4.服务发起调用 ,像调用本地方式一样调用其它服务
@Autowiredprivate AccountServiceFeignClient accountService;@Autowiredprivate StorageServiceFeignClient storageService;public Result<?> createOrder(String userId, String commodityCode, Integer count) {// deduct storageStorageDTO storageDTO = new StorageDTO();storageDTO.setCommodityCode(commodityCode);storageDTO.setCount(count);//RestTemplate远程调用//String storage_url = "http://localhost:8010/storage/reduce-stock";//整合了Nacos+LoadBalaner,可以使用微服务名tlmall-storage代替localhost:8020//String storage_url = "http://tlmall-storage/storage/reduce-stock";//Integer storageCode = restTemplate.postForObject(storage_url,storageDTO, Result.class).getCode();//openFeign远程调用Integer storageCode = storageService.reduceStock(storageDTO).getCode();if (storageCode.equals(COMMON_FAILED.getCode())) {throw new BusinessException("stock not enough");}// deduct balanceint price = count * 2;AccountDTO accountDTO = new AccountDTO();accountDTO.setUserId(userId);accountDTO.setPrice(price);//RestTemplate远程调用//String account_url = "http://localhost:8020/account/reduce-balance";//整合了Nacos+LoadBalaner,可以使用微服务名tlmall-account代替localhost:8020//String account_url = "http://tlmall-account/account/reduce-balance";//Integer accountCode = restTemplate.postForObject(account_url, accountDTO, Result.class).getCode();//openFeign远程调用Integer accountCode = accountService.reduceBalance(accountDTO).getCode();if (accountCode.equals(COMMON_FAILED.getCode())) {throw new BusinessException("balance not enough");}
}
重启服务,验证
1.到Nacos控制台查看服务是否注册成功
2.进行测试访问url
3.借助idea工具,复制一个服务,再次操作,看当有2个服务时,能否把2个都调用了
相关文章:
spring cloud微服务-OpenFeign的使用
OpenFeign的使用 openFeign的作用是服务间的远程调用 ,比如通过OpenFeign可以实现调用远程服务。 已经有了LoadBalancer为什么还要用openFeign? 在微服务架构中,LoadBalancer和OpenFeign虽然都提供了服务间调用的能力,但它们的设计目的和…...
【汇编】关于函数调用过程的若干问题
1. 为什么需要bp指针? 因为bp是栈帧的起始地址,函数内的局部栈变量,采用相对bp的内存寻址。不能相对于sp,sp是一直在变的。 2. 函数调用过程? 函数开始,先压栈bp,保存父函数栈底指针bp&#…...

针对Kali 系统进行分区设置
手动设置分区 Kali 安装之腾讯云经验遇到坑_腾讯云安装kali-CSDN博客 安装过程中的几处关键点,文字总结如下: ①分区--手动 ②是否创建空的分区表 ---yes ③选择---创建一个新的分区 ④大小--默认-----主分区 ⑤分区类型----系统)一个逻辑分区 ⑥是否…...
C语言简单测试总结
前言 在学C语言之前回顾一下C中的一些知识.选用的是中国大学MOOC中C程序设计(面向对象进阶)中的C语言水平评估测试题. 题目 The keyword "unsigned" can modify the keyword [ B ] A.signed B.long C.long double D.float题解:unsigned是无符号的意识,通常在…...

Android OpenGl(二) Shader
一、Shader 1、什么是Shader,为什么要使用Shder (1)shader运行在gpu上的小程序 (2)以前使用固定管线,但缺点是灵活度不够,无法满足复杂需求,为了解决固定管线的缺点,出…...

DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(1)
DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(1) 架构 架构图 本设计方案的目标是在一台阿里云ECS服务器上搭建一个轻量级的Kubernetes服务k3s节点,并基于Argo搭建一套完整的DevOps CI/CD服务平台,包括Argo CD…...
【已解决】“Content-Security-Policy”头缺失
1、作用 简称CSP,意为内容安全策略,通过设置约束指定可信的内容来源,降低异源文件攻击,例如:js/css/image等 2、相关设置值 指令名 demo 说明 default-src self cdn.example.com 默认策略,可以应用于js文件/图片…...

win系统B站播放8k视频启用HEVC编码
下载HEVC插件 点击 HEVC Video Extension 2.2.20.0 latest downloads,根据教程下载安装 安装 Random User-Agent 点击 Random User-Agent 安装 配置 Random User-Agent 在youtube中会导致视频无法播放,我选择直接屏蔽了 B站设置...

快速理解24种设计模式
简单工厂模式 建立产品接口类,规定好要实现方法。 建立工厂类,根据传入的参数,实例化所需的类,实例化的类必须实现指定的产品类接口 创建型 单例模式Singleton 保证一个类只有一个实例,并提供一个访问他它的全局…...

为什么深度学习和神经网络要使用 GPU?
为什么深度学习和神经网络要使用 GPU? 本篇文章的目标是帮助初学者了解 CUDA 是什么,以及它如何与 PyTorch 配合使用,更重要的是,我们为何在神经网络编程中使用 GPU。 图形处理单元 (GPU) 要了解 CUDA,我们需要对图…...

Yocto 项目中的交叉编译:原理与实例
Yocto 项目是一个强大的工具集,它专注于为嵌入式系统生成定制的 Linux 发行版。交叉编译在 Yocto 项目中扮演着核心角色,它使得开发者能够在功能强大的宿主机上构建适用于资源受限目标设备的软件系统。这篇文章将从运行原理、实际案例和工具链组成等角度…...

Python入门:7.Pythond的内置容器
引言 Python 提供了强大的内置容器(container)类型,用于存储和操作数据。容器是 Python 数据结构的核心部分,理解它们对于写出高效、可读的代码至关重要。在这篇博客中,我们将详细介绍 Python 的五种主要内置容器&…...

sqlserver镜像设置
本案例是双机热备,只设置主体服务器(主)和镜像服务器(从),不设置见证服务器 设置镜像前先检查是否启用了 主从服务器数据库的 TCP/IP协议 和 RemoteDAC (1)打开SQL Server配置管理器…...

Pandas04
Pandas01 Pandas02 Pandas03 文章目录 内容回顾1 数据的合并和变形1.1 df.append (了解)1.2 pd.concat1.3 merge 连接 类似于SQL的join1.4 join (了解) 2 变形2.1 转置2.2 透视表 3 MatPlotLib数据可视化3.1 MatPlotLib API 套路 &为什么要可视化3.2 单变量可视化3.3 双变量…...
农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序(升级版)
农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序升级版 调整的功能 上一个小程序只是能计算当年的农历节日的间隔时间,那么这次修改一下,任意年份的农历节日都可以,并且能输出农历节日对应的阳历日期࿰…...
c语言中void关键字的含义和用法
在 C 语言中,void 是一个特殊的关键字,主要有以下几个用途: 1. 表示函数没有返回值 当一个函数不需要返回任何值时,可以将其返回类型声明为 void。 #include <stdio.h>void printMessage() {printf("Hello, World!\…...
安卓音频之dumpsys audio
目录 概述 详述 dumpsys audio 1、音频服务生命周期的事件日志 2、音频焦点事件日志 3、音频流音量信息 4、音量组和设备的相关信息 5、铃声模式 6、音频路由 7、其他状态信息 8、播放活动监控信息 9、录音活动记录 10、AudioDeviceBroker 的记录 11、音效&#…...

玩客云v1.0 刷机时无法识别USB
v1.0刷机时公对公插头掉了,刷机失败,再次刷机,一直提示无法识别的USB设备,此时LED一直不亮,就像是刷成砖了一样,查了好多文章最后发现正面还有一个地方需要短接。 背面的短接点 【免费】玩客云刷机包s805-…...

影刀进阶指令 | Kimi (对标ChatGPT)
文章目录 影刀进阶指令 | Kimi (对标ChatGPT)一. 需求二. 流程三. 实现3.1 流程概览3.2 流程步骤讲解1\. 确定问题2\. 填写问题并发送3\. 检测答案是否出完 四. 运维 影刀进阶指令 | Kimi (对标ChatGPT) 简单讲讲RPA调用kimi实现…...
前端项目 node_modules依赖报错解决记录
1.首先尝试解决思路 npm报错就切换yarn , yarn报错就先切换npm删除 node_modules 跟 package-lock.json文件重新下载依 2. 报错信息: Module build failed: Error: Missing binding D:\vue-element-admin\node_modules\node-sass\vendor\win32-x64-8…...
leetcode 386. 字典序排数 中等
给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。 示例 1: 输入:n 13 输出:[1,10,11,12,13,2,3,4,5,6,7,8,9]示例 2: 输入:n 2…...
2025 cs144 Lab Checkpoint 3: TCP Receiver
文章目录 1 关于TCP Sender1.1 关键机制重传超时(RTO)与定时器 2 实现TCP Sender2.1 void push( const TransmitFunction& transmit );const TransmitFunction& transmit 函数型参数?从哪里读取字节࿱…...

AUTOSAR实战教程--开放式通用DoIP刷写工具OpenOTA开发计划
目录 软件概述 安装与运行 界面说明 3.1 功能区划分 3.2 状态显示 基本操作流程 4.1 DoIP连接配置 4.2 服务配置(刷写流程) 4.3 执行操作 4.4 保存配置 4.5 加载配置 功能详解 5.1 核心功能模块 诊断服务配置 通信设置 文件下载 工具功…...

系统思考:跳出症状看全局
明天将为华为全球采购认证管理部的伙伴们带来一场关于系统思考的深度课程!通过经典的啤酒游戏经营决策沙盘,一起沉浸式体验如何从全局视角看待问题,发现单点最优并不等于全局最优。 这不仅是一次简单的课程,更是一次洞察系统背后…...
基于 actix-web 框架的简单 demo
以下是一个基于 actix-web 框架的简单 demo, 如果你还没有 Rust,我们建议你使用 rustup 来管理你的 Rust 安装。官方 Rust 指南有一个很棒的入门部分。 Actix Web 目前支持的最低 Rust 版本 (MSRV) 为 1.72。运行 rustup update…...
vue3 eslint ts 关闭多单词命名检查
无效做法 import { globalIgnores } from eslint/config import {defineConfigWithVueTs,vueTsConfigs, } from vue/eslint-config-typescript import pluginVue from eslint-plugin-vue import skipFormatting from vue/eslint-config-prettier/skip-formatting// To allow m…...

微软重磅发布Magentic UI,交互式AI Agent助手实测!
微软重磅发布Magentic UI,交互式AI Agent助手实测! 何为Magentic UI? Magentic UI 是微软于5.19重磅发布的开源Agent助手,并于24日刚更新了第二个版本0.04版 从官方的介绍来看,目标是打造一款 以人为中心 的智能助手,其底层由多个不同的智能体系统驱动,能够实现网页浏览…...

从“人找政策”到“政策找人”:智能退税ERP数字化重构外贸生态
离境退税新政核心内容与外贸企业影响 (一)政策核心变化解析 退税商店网络扩容 新政明确鼓励在大型商圈、旅游景区、交通枢纽等境外旅客聚集地增设退税商店,并放宽备案条件至纳税信用M级企业。以上海为例,静安区计划新增1000家退…...

基于微信小程序的车位共享平台的设计与实现源码数据库文档
摘 要 近年来,随着国民经济的飞速发展,城镇化进程的步伐加快,城市人口急剧增长,人们的生活水平持续改善,特别是大中型城市,城市的交通规模日益增大,汽车的保有量不断提高,然而城市的…...
2种官方方法关闭Windows防火墙
2种官方方法关闭Windows防火墙 引言一、防火墙:你电脑的"智能安检员"二、这些场景,可能需要"临时撤防"三、极速关闭方案方法一:通过系统设置(Win10/11专属通道)方法二:通过传统控制面板(全系统通用:Win7-11全系)四、 必读安全警告(关闭前请三思!…...