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

OpenFeign快速入门 示例:黑马商城

使用起因

之前我们利用了Nacos实现了服务的治理,利用RestTemplate实现了服务的远程调用。这样一来购物车虽然通过远程调用实现了调用商品服务的方法,但是远程调用的代码太复杂了:


解决方法

并且这种调用方式比较复杂,一会儿远程调用,一会儿本地调用。

因此,我们改变并优化远程调用的代码,让远程调用像本地方法调用一样简单。而这就要用到OpenFeign组件了。

其实远程调用的关键点就在于四个:

  • 请求方式

  • 请求路径

  • 请求参数

  • 返回值类型

所以我们使用OpenFeign只需要利用SpringMVC的相关注解来声明上述4个参数,然后OpenFeign基于动态代理帮我们生成远程调用的代码,我们就不用在写那繁琐的代码了,直接调用它帮我们生成的代码就行了,非常方便


快速上手

1.导入依赖

  <!--openFeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--负载均衡器--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>

2.启用OpenFeign

在cart-service的CartApplication启动类上添加注解,表示开启OpenFeign功能


3.编写OpenFeign客户端

代码如下:

package com.hmall.api.client;import com.hmall.api.dto.ItemDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;import java.util.Collection;
import java.util.List;// 远程调用商品服务
@FeignClient(name = "item-service")
public interface ItemClient {@GetMapping("/items")List<ItemDTO> queryItemsByIds(@RequestParam("ids") Collection<Long> ids);
}

这里只需要声明接口,不用实现方法。接口中的注解解释:

@FeignClient("item-service"):声明服务名称

@GetMapping("/items"):声明请求路径

@RequestParam("ids") Collection<Long> ids:声明请求参数

List<ItemDTO>:返回值类型

有了上面接口后,我们只需要调用这个方法,就可以实现远程调用了


4.使用FeignClient

最后我们在cart-service的CartServiceImpl中修改代码,直接调用ItemClient的方法即可:

OpenFeign替我们完成了服务拉取、负载均衡、发送http请求的所有工作
而且,这里我们不再需要RestTemplate了,还省去了RestTemplate的注册

相关文章:

OpenFeign快速入门 示例:黑马商城

使用起因 之前我们利用了Nacos实现了服务的治理,利用RestTemplate实现了服务的远程调用。这样一来购物车虽然通过远程调用实现了调用商品服务的方法,但是远程调用的代码太复杂了: 解决方法 并且这种调用方式比较复杂&#xff0c;一会儿远程调用&#xff0c;一会儿本地调用。 因…...

【C++】ceil 和 floor 函数的实现与分析

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;ceil 和 floor 函数的基础介绍1. ceil 函数定义与功能示例代码输出结果功能分析使用场景 2. floor 函数定义与功能示例代码输出结果功能分析使用场景 &#x1f4af;自行实现…...

zabbix监控山石系列Hillstone配置模版(适用于zabbix6及以上)

监控项&#xff1a; 触发器&#xff1a; 监控数据&#xff1a;...

在瑞芯微RK3588平台上使用RKNN部署YOLOv8Pose模型的C++实战指南

在人工智能和计算机视觉领域,人体姿态估计是一项极具挑战性的任务,它对于理解人类行为、增强人机交互等方面具有重要意义。YOLOv8Pose作为YOLO系列中的新成员,以其高效和准确性在人体姿态估计任务中脱颖而出。本文将详细介绍如何在瑞芯微RK3588平台上,使用RKNN(Rockchip N…...

CTFHub disable_functions通关

LD_PRELOAD 来到首页发现有一句话直接就可以用蚁剑连接 根目录里有/flag但是不能看;命令也被ban了就需要绕过了 绕过工具在插件市场就可以下载 如果进不去的话 项目地址: #本地仓库;插件存放 antSword\antData\plugins 绕过选择 上传后我们点进去可以看到多了一个绕过的文件;…...

Chromium GN 目标指南 - view_example 计数器示例 (七)

1. 引言 在前面的文章中&#xff0c;我们学习了如何在 views_examples 中添加自定义 Button 示例。在本篇文章中&#xff0c;我们将继续探索 Views 框架的应用&#xff0c;创建一个简单的计数器示例&#xff0c;以学习如何使用 Label 和 Button 控件进行交互&#xff0c;以及如…...

一步一步写线程之十六线程的安全退出之二例程

一、说明 在一篇分析了多线程的安全退出的相关机制和方式&#xff0c;那么本篇就针对前一篇的相关的分析进行举例分析。因为有些方法实现的方法类似&#xff0c;可能就不一一重复列举了&#xff0c;相关的例程主要以在Linux上的运行为主。 二、实例 线程间的同步&#xff0c…...

【Linux系列】Shell 脚本中的条件判断:`[ ]`与`[[ ]]`的比较

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

ArcGIS+MIKE21 洪水淹没分析、溃坝分析,洪水淹没动态效果

洪水淹没分析过程&#xff1a; 一、所需数据&#xff1a; 1.分析区域DEM数据 二、ArcGIS软件 1.提取分析区域DEM&#xff08;水库坝下区域&#xff09; 2.DEM栅格转点 3.计算转换后几何点的x和y坐标值&#xff08;精度20、小数位3&#xff09; 4.导出属性表&#xff0c;形式…...

Git 的基本概念和使用

Git是一个分布式版本控制系统&#xff0c;它可以帮助开发人员追踪和管理代码的修改。下面是Git的基本概念和使用方式的解释&#xff1a; 仓库&#xff08;Repository&#xff09;&#xff1a;Git使用仓库来存储代码和版本历史记录。仓库可以位于本地计算机上&#xff0c;也可以…...

*【每日一题 基础题】 [蓝桥杯 2024 省 B] 好数

[蓝桥杯 2024 省 B] 好数 好数 一个整数如果按从低位到高位的顺序&#xff0c;奇数位&#xff08;个位、百位、万位……&#xff09;上的数字是奇数&#xff0c;偶数位&#xff08;十位、千位、十万位……&#xff09;上的数字是偶数&#xff0c;我们就称之为“好数”。 给定一…...

对中文汉字排序的方法总结

写在前面 在各个系统中&#xff0c;都随处可见根据某个字段进行升序(ASC)或降序(DESC)进行排序展示。但进行中文汉字排序和查找的时候&#xff0c;对中文汉字的排序和查找结果往往都是错误的。 为了尽量提供全面的解决方法&#xff0c;本文会从各个层面出发告知有需要的人对应…...

【解决报错】AttributeError: ‘NoneType‘ object has no attribute ‘group‘

学习爬虫时&#xff0c;遇到如下报错&#xff1a; 报错原因&#xff1a; 正则表达式的 search 或 finditer 方法没有找到任何匹配项&#xff0c;可能是换行符处理不当等。 解决方法如下&#xff1a; 在正则表达式末尾加上re.S即可&#xff0c;re.S是一个编译标志&#xff0c…...

数据结构经典算法总复习(上卷)

第一章&#xff1a;数据结构导论 无重要考点&#xff0c;仅需了解时间复杂度。 第二章&#xff1a;线性表 1.获得线性表第i个元素 void GetElem_sq(SqList L, int i, ElemType &e) {if (i<1 || i>L.length) ErrorMsg("Invalid i value"); //注意错误监…...

JS获取URL中参数值的4种方法

方法1&#xff1a;现代浏览器都支持 URL 和 URLSearchParams 对象&#xff0c;可以很方便地从URL中提取参数 // 假设当前URL为 "https://example.com/?nameJohn&age30" const url new URL(window.location.href); // 或者你可以直接传入一个URL字符串 const …...

【面经】2024年软件测试面试题,精选100 道(附答案)

测试技术面试题 1、我现在有个程序&#xff0c;发现在 Windows 上运行得很慢&#xff0c;怎么判别是程序存在问题还是软硬件系统存在问题&#xff1f; 2、什么是兼容性测试&#xff1f;兼容性测试侧重哪些方面&#xff1f; 3、测试的策略有哪些&#xff1f; 4、正交表测试用…...

LabVIEW水泵性能测试系统

在现代工业应用中&#xff0c;水泵作为一种广泛使用的流体输送设备&#xff0c;其性能的可靠性对整个生产系统的稳定运行至关重要。通过LabVIEW软件配合专业硬件设备&#xff0c;设计了一套水泵性能测试系统&#xff0c;实现对各类水泵的综合性能测试与分析&#xff0c;提升水泵…...

React 第十九节 useLayoutEffect 用途使用技巧注意事项详解

1、概述 useLayoutEffect 是useEffect 的一个衍生版本&#xff0c;只是他们的执行时机不同 useLayoutEffect 用于在DOM更新执行完成之后&#xff0c;浏览器渲染绘制之前执行&#xff0c;这会阻塞浏览器的渲染&#xff1b; useEffect 的执行时机是在组件首次渲染和更新渲染之后…...

重温设计模式--2、设计模式七大原则

文章目录 1、开闭原则&#xff08;Open - Closed Principle&#xff0c;OCP&#xff09;定义&#xff1a;示例&#xff1a;好处&#xff1a; 2、里氏替换原则&#xff08;Liskov Substitution Principle&#xff0c;LSP&#xff09;定义&#xff1a;示例&#xff1a;好处&#…...

【NLP高频面题 - Transformer篇】Transformer的位置编码是如何计算的?

【NLP高频面题 - Transformer篇】Transformer的位置编码是如何计算的&#xff1f; 重要性&#xff1a;★★★ NLP Github 项目&#xff1a; NLP 项目实践&#xff1a;fasterai/nlp-project-practice 介绍&#xff1a;该仓库围绕着 NLP 任务模型的设计、训练、优化、部署和应用…...

Unity基础:材质Material与Shader的基础关联用法

Unity基础&#xff1a;材质Material与Shader的基础关联用法&#x1f4da; 本章学习目标&#xff1a;深入理解材质Material与Shader的基础关联用法的核心概念与实践方法&#xff0c;掌握关键技术要点&#xff0c;了解实际应用场景与最佳实践。本文属于《Unity工程师成长之路教程…...

收藏必备!小白入门:详解开源网络入侵检测系统(Suricata、Snort、Zeek_Bro、Security Onion)

收藏必备&#xff01;小白程序员入门&#xff1a;详解开源网络入侵检测系统&#xff08;Suricata、Snort、Zeek/Bro、Security Onion&#xff09; 本文介绍了网络入侵检测系统&#xff08;NIDS&#xff09;和主机入侵检测系统&#xff08;HIDS&#xff09;的概念&#xff0c;重…...

造相Z-Image模型v2传统艺术风格专题:水墨、版画与油画的数字重生

造相Z-Image模型v2传统艺术风格专题&#xff1a;水墨、版画与油画的数字重生 当千年传统艺术遇见现代AI技术&#xff0c;会碰撞出怎样的数字火花&#xff1f; 最近深度体验了造相Z-Image模型v2在传统艺术风格方面的表现&#xff0c;不得不说&#xff0c;这个模型在模拟水墨、版…...

【2025最新】基于SpringBoot+Vue的大型商场应急预案管理系统管理系统源码+MyBatis+MySQL

摘要 随着城市化进程的加速和商业综合体的快速发展&#xff0c;大型商场作为人员密集场所&#xff0c;其安全管理面临严峻挑战。传统应急预案管理多依赖纸质文档和人工操作&#xff0c;存在响应速度慢、信息更新滞后、协同效率低等问题。近年来&#xff0c;数字化技术在应急管理…...

OpenClaw多任务调度:千问3.5-9B并行处理技巧

OpenClaw多任务调度&#xff1a;千问3.5-9B并行处理技巧 1. 为什么需要多任务调度 去年冬天&#xff0c;我接手了一个数据密集型项目&#xff0c;需要同时处理数据分析、邮件生成和文件格式转换三项任务。最初尝试用传统脚本串行执行&#xff0c;结果发现总耗时超过8小时——…...

手把手教你用Python和MATLAB生成标准SVS文件(从numpy数组到多级金字塔)

从Numpy数组到多级金字塔&#xff1a;Python与MATLAB生成SVS文件的实战指南 在数字病理领域&#xff0c;全切片图像(WSI)的生成与共享已成为研究协作的关键环节。许多研究者面临一个共同挑战&#xff1a;如何将处理后的numpy数组&#xff08;如分割结果或合成图像&#xff09;转…...

MicroBlaze 大程序 Flash 固化与自启

MicroBlaze 大程序 Flash 固化与自启1. 核心原因分析&#xff1a;为什么大程序不能直接固化&#xff1f;在带 ARM 核的 FPGA&#xff08;如 Zynq 系列&#xff09;中&#xff0c;硬件内置了 BootROM 和 FSBL 机制&#xff0c;可以自动处理镜像打包和 DDR 初始化。但在 纯 FPGA&…...

django基于深度学习的淘宝用户购物可视化与行为预测系统设计_3jf982vi_c024

前言在数字经济 与电商行业高速发展的背景下&#xff0c;传统商品销售行业面临数据处理滞后、决策缺乏科学依据等挑战。企业依赖人工统计与经验判断的方式&#xff0c;难以应对海量交易数据带来的复杂性&#xff0c;导致资源配置效率低下、市场竞争力下降。本系统基于Python、D…...

HtmlTextView项目维护指南:如何继续开发这个停止维护的开源项目

HtmlTextView项目维护指南&#xff1a;如何继续开发这个停止维护的开源项目 【免费下载链接】html-textview TextView to display simple HTML 项目地址: https://gitcode.com/gh_mirrors/ht/html-textview 你是否正在寻找一个轻量级的Android HTML文本显示解决方案&…...

Lixie数码管驱动库深度解析:WS2812B嵌入式显示控制实践

1. Lixie 数码管驱动库技术解析&#xff1a;面向嵌入式工程师的深度实践指南Lixie 是一款专为驱动“Lixie 边缘导光数码管”&#xff08;Edge-Lit Digit Display&#xff09;设计的 Arduino 兼容库。它并非传统真空管或七段 LED&#xff0c;而是一种融合光学设计与现代 LED 控制…...