当前位置: 首页 > 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的注册

http://www.lryc.cn/news/509216.html

相关文章:

  • 【C++】ceil 和 floor 函数的实现与分析
  • zabbix监控山石系列Hillstone配置模版(适用于zabbix6及以上)
  • 在瑞芯微RK3588平台上使用RKNN部署YOLOv8Pose模型的C++实战指南
  • CTFHub disable_functions通关
  • Chromium GN 目标指南 - view_example 计数器示例 (七)
  • 一步一步写线程之十六线程的安全退出之二例程
  • 【Linux系列】Shell 脚本中的条件判断:`[ ]`与`[[ ]]`的比较
  • ArcGIS+MIKE21 洪水淹没分析、溃坝分析,洪水淹没动态效果
  • Git 的基本概念和使用
  • *【每日一题 基础题】 [蓝桥杯 2024 省 B] 好数
  • 对中文汉字排序的方法总结
  • 【解决报错】AttributeError: ‘NoneType‘ object has no attribute ‘group‘
  • 数据结构经典算法总复习(上卷)
  • JS获取URL中参数值的4种方法
  • 【面经】2024年软件测试面试题,精选100 道(附答案)
  • LabVIEW水泵性能测试系统
  • React 第十九节 useLayoutEffect 用途使用技巧注意事项详解
  • 重温设计模式--2、设计模式七大原则
  • 【NLP高频面题 - Transformer篇】Transformer的位置编码是如何计算的?
  • 基于SSM(Spring + Spring MVC + MyBatis)框架构建一个图书馆仓储管理系统
  • web的五个Observer API
  • Java基础:抽象类与接口
  • llama.cpp:PC端测试 MobileVLM -- 电脑端部署图生文大模型
  • Web前端基础知识(一)
  • 基于谱聚类的多模态多目标浣熊优化算法(MMOCOA-SC)求解ZDT1-ZDT4,ZDT6和工程应用--盘式制动器优化,MATLAB代码
  • 国标GB28181摄像机接入EasyGBS如何通过流媒体技术提升安防监控效率?
  • [Unity] ShaderGraph动态修改Keyword Enum,实现不同效果一键切换
  • Unity开发哪里下载安卓Android-NDK-r21d,外加Android Studio打包实验
  • FFTW基本概念与安装使用
  • 【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析