谷粒商城学习笔记-22-分布式组件-SpringCloud-OpenFeign测试远程调用

文章目录

  • 一,OpenFeign的简介
  • 二,OpenFeign的使用步骤
    • 1,场景说明
    • 2,引入依赖
    • 2,开启OpenFeign
    • 3,编写Feign接口
    • 4,使用feign调用远程接口
    • 5,验证
  • 错误记录

上一节学习了注册中心,我们知道服务器A调用服务器B之前,会从注册中心获取到服务B的IP,然后服务器A向服务B发出请求。

那么服务器A是怎么向服务B发出请求的呢?

这是本节要解决的主要问题。

在这个项目中,采用OpenFeign这个组件完成服务间的调用,OpenFeign是对Http请求的封装。

一,OpenFeign的简介

OpenFeign是一个声明式的 HTTP 客户端,它的目的就是让远程调用更加简单。

Feign 提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好 HTTP 请求的参数、格式、地址等信息。

Feign 整合了 Ribbon(负载均衡)和 Hystrix(服务熔断),可以让我们不再需要显式地使用这两个组件。

SpringCloudFeign 在 NetflixFeign 的基础上扩展了对 SpringMVC 注解的支持,在其实现下,我们只需创建一个接口并用注解的方式来配置它,即可完成对服务提供方的接口绑定。简化了SpringCloudRibbon 自行封装服务调用客户端的开发量。

二,OpenFeign的使用步骤

1,场景说明

我们以一个场景化的问题学习OpenFeign的使用,假设会员服务要调用优惠券服务的一个接口,这个接口返回了会员的能使用的优惠券信息。

这个优惠券的接口如下,这是一个用来测试的接口,没有真实的业务逻辑。
在这里插入图片描述

	@RequestMapping("member/list")public R list(){CouponEntity couponEntity = new CouponEntity();couponEntity.setCouponName("慢100减80");return R.ok().put("page", Arrays.asList(couponEntity));}

启动服务后,可以使用下面的url在浏览器访问这个接口。

http://localhost:7000/coupon/coupon/member/list

在这里插入图片描述
浏览器调用这个接口,发出的是Http请求。

会员服务要使用这个接口,也要想优惠券服务发出Http请求,如果没有OpenFeign,我们需要自己封装Http请求,并解析Http响应,会非常复杂。

使用OpenFeign可以大大简化这个过程。

2,引入依赖

考虑到所有模块都需要这个依赖,所以把这个依赖声明放在common模块最为合适。

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2,开启OpenFeign

需要在启动类加上类注解@EnableFeignClients,并通过basePackages属性明确feign接口所在的包。

@EnableFeignClients(basePackages = "com.atguigu.gulimall.pms.feign")

@EnableFeignClients是激活OpenFeign的关键,在 Spring Boot 应用的启动类加上这个注解,就相当于告诉 Spring:“嘿,我要开始使用 Feign 啦!请帮我找到所有用 @FeignClient 标记的接口,并为它们创建代理对象。”

这样,Spring 就会扫描basePackages指定的包下的所有类,寻找那些用 @FeignClient 注解过的接口。对于每一个这样的接口,Spring 都会创建一个代理类,这个代理类看起来就像你在调用本地方法一样,但实际上它是在发起远程调用。

总结一下,@EnableFeignClients 的作用就是:

  • 开启 Feign 的功能;
  • 扫描并注册所有用 @FeignClient 标记的接口;
  • 创建代理类,使得你能够以声明式的方式调用远程服务,就像调用本地方法一样简单。

3,编写Feign接口

首先在会员工程下新建一个包,名为feign,我们把所有Feign声明相关的类都放在这个包下,便于管理。

如下图所示。

  • ①所有的远程调用相关的类都定义在feign包下
  • ②与优惠券相关的远程调用接口的定义都可以放在这个类中,通过这个类调用优惠券服务的接口
  • ③使用注解@FeignClient指定这个类下的接口要调用是哪个服务,在FeignClient中指定服务名,需要根据服务名从注册中心获取IP
  • ④Feign相关的类是一个接口,不需要提供具体的实现
  • ⑤声明远程接口,注意通过url指定需要调用的接口

在这里插入图片描述

@FeignClient("gulimall-coupon")
public interface CouponFeign {@RequestMapping("/coupon/coupon/member/list")public R list();
}

4,使用feign调用远程接口

一般情况下,我们会在Service中调用Feign接口,但理论上,我们可以在任何地方调用Feign接口。

接下来,为了演示的方便,我们在Member会员服务的Controller接口中调用Feign接口。

如下,我们在MemberController中编写演示代码。

@Autowiredprivate CouponFeign couponFeign;@RequestMapping("/coupons")public R coupons(){return couponFeign.list();}

在这里插入图片描述

  • ① 注入CouponFeign对象
  • ② 调用CouponFeign的list方法,就像调用本地接口一样,OpenFeign底层会将这个调用封装为Http请求,并接收、封装响应

通过这个例子,我们可以体验到使用OpenFeign进行远程调用是非常简单的,语法和调用本地接口一样。

5,验证

启动会员服务,在浏览器输入:

http://localhost:8000/member/member/coupons

在这里插入图片描述
我们调用的是会员服务的接口,但是会员服务通过OpenFeign实现对优惠券服务的远程调用。

错误记录

错误记录-SpringCloud-OpenFeign测试远程调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3224931.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Linux——多线程(四)

前言 这是之前基于阻塞队列的生产消费模型中Enqueue的代码 void Enqueue(const T &in) // 生产者用的接口{pthread_mutex_lock(&_mutex);while(IsFull())//判断队列是否已经满了{pthread_cond_wait(&_product_cond, &_mutex); //满的时候就在此情况下等待// 1.…

泛微开发修炼之旅--36通过js控制明细表中同一列中多个浏览框的显示控制逻辑(明细表列中多字段显示逻辑控制)

文章链接&#xff1a;36通过js控制明细表中同一列中多个浏览框的显示控制逻辑&#xff08;明细表列中多字段显示逻辑控制&#xff09;

【基于R语言群体遗传学】-13-群体差异量化-Fst

在前几篇博客中&#xff0c;我们深度学习讨论了适应性进化的问题&#xff0c;从本篇博客开始&#xff0c;我们关注群体差异的问题&#xff0c;建议大家可以先看之前的博客&#xff1a;群体遗传学_tRNA做科研的博客-CSDN博客 一些新名词 Meta-population:An interconnected gro…

2024年06月CCF-GESP编程能力等级认证Python编程四级真题解析

本文收录于专栏《Python等级认证CCF-GESP真题解析》,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级,那他可以选择的认证语言有几种?( ) A. 1 B. 2 C…

昇思MindSpore学习笔记6-02计算机视觉--ResNet50迁移学习

摘要&#xff1a; 记录MindSpore AI框架使用ResNet50迁移学习方法对ImageNet狼狗图片分类的过程、步骤。包括环境准备、下载数据集、数据集加载、构建模型、固定特征训练、训练评估和模型预测等。 一、概念 迁移学习的方法 在大数据集上训练得到预训练模型 初始化网络权重参数…

通用个人客户关系管理系统设计

设计一个通用个人客户关系管理系统&#xff08;Personal CRM&#xff09;&#xff0c;旨在帮助个人用户管理他们的社交网络、职业联系人、个人项目和日常沟通&#xff0c;需要关注以下几个核心设计原则和功能模块&#xff1a; 核心设计原则 易用性&#xff1a;界面简洁直观&a…

Hospital Management Startup 1.0 SQL 注入漏洞(CVE-2022-23366)

前言 CVE-2022-23366是一个影响HMS v1.0的SQL注入漏洞。该漏洞存在于patientlogin.php文件中&#xff0c;允许攻击者通过特定的SQL注入来获取或修改数据库中的敏感信息。 具体来说&#xff0c;攻击者可以通过向patientlogin.php发送恶意构造的SQL语句来绕过身份验证&#xff…

Java系列-valitile

背景 volatile这个关键字可以说是面试过程中出现频率最高的一个知识点了&#xff0c;面试官的问题也是五花八门&#xff0c;各种刁钻的角度。之前也是简单背过几道八股文&#xff0c;什么可见性&#xff0c;防止指令重拍等&#xff0c;但面试官一句&#xff1a;volatile原理是什…

Echarts实现github提交记录图

最近改个人博客&#xff0c;看了github的提交记录&#xff0c;是真觉得好看。可以移植到自己的博客上做文章统计 效果如下 代码如下 <!DOCTYPE html> <html lang"en" style"height: 100%"><head><meta charset"utf-8"> …

稀疏建模介绍,详解机器学习知识

目录 一、什么是机器学习&#xff1f;二、稀疏建模介绍三、Lasso回归简介四、Lasso超参数调整与模型选择 一、什么是机器学习&#xff1f; 机器学习是一种人工智能技术&#xff0c;它使计算机系统能够从数据中学习并做出预测或决策&#xff0c;而无需明确编程。它涉及到使用算…

OpenCV MEI相机模型(全向模型)

文章目录 一、简介二、实现代码三、实现效果参考文献一、简介 对于针孔相机模型,由于硬件上的限制(如进光量等),他的视野夹角往往有效区域只有140度左右,因此就有研究人员为每个针孔相机前面再添加一个镜片,如下所示: 通过折射的方式增加了相机成像的视野,虽然仍然达不…

神经网络设计过程

1.可根据Iris特征直接判断 2.神经网络方法&#xff0c;采集大量的Iris特征&#xff0c;分类对应标签&#xff0c;构成数据集。 将数据集喂入搭好的神经网络结构&#xff0c;网络通过反向传播优化参数得到模型。 有新的网络送入到模型里&#xff0c;模型会给出识别结果。 3.…

二次开发报错Request method ‘GET’ not supported

环境&#xff1a;springboot3 问题复刻&#xff1a; 前端上传图片的时候&#xff0c;出现了这个报错&#xff0c;离谱 解决方法&#xff1a;修改本地上传文件的路径 没错&#xff0c;路径错误的报错居然是这个&#xff0c;真顶级 是因为你的配置文件中profile这个属性的路径在…

解读‘‘不要卷模型,要卷应用‘‘

前言 2024 年 7 月 4 日&#xff0c;世界人工智能大会暨人工智能全球治理高级别会议全体会议在上海世博中心举行。百度创始人李彦宏在产业发展主论坛上发言&#xff0c;呼吁不要卷模型&#xff0c;要卷应用。 目录 四个要点 积极的观点 不合理性 总结 四个要点 李彦宏的呼吁…

一、openGauss详细安装教程

一、openGauss详细安装教程 一、安装环境二、下载三、安装1.创建omm用户2.授权omm安装目录3.安装4.验证是否安装成功5.配置gc_ctl命令 四、配置远程访问1.配置pg_hba.conf2.配置postgresql.conf3.重启 五、创建用户及数据库 一、安装环境 Centos7.9 x86openGauss 5.0.1 企业版…

普中51单片机:中断系统与寄存器解析(六)

文章目录 引言中断流程图中断优先级下降沿中断结构图中断相关寄存器IE中断允许寄存器&#xff08;可位寻址&#xff09;XICON辅助中断控制寄存器&#xff08;可位寻址&#xff09;TCON标志控制寄存器SCON串行口控制寄存器 中断号中断响应条件中断函数代码模板电路图开发板IO连接…

tensorflow张量生成以及常用函数

张量tensor&#xff1a;多维数组&#xff08;列表&#xff09; 阶&#xff1a;张量的维数 维数 阶 名字 例子 0-D 0 标量 scalar s 1&#xff0c; 2&#xff0c; 3 1-D 1 向量 vector…

Python 的 metaclass

文章目录 先说结论1. metaclass 的作用2. 主要的执行过程 1. metaclass.__new__2. metaclass.__call__关于 metaclass.__init__ 3. metaclass.__prepare__4. 自动创建 __slots__ 属性4.1 metaclass 的接口类4.2 metaclass conflict 5. Class metaprogramming 先说结论 1. meta…

10-windows自带的磁盘上传配额限制?提示这个错误:XXX用户上空间不足,需要XXMB来复制此项目,请删除或移动文件来获得足够的空间如何解决?

1.配置缘由&#xff1a; Windows自带的功能&#xff1a;限制某个磁盘登录的用户上传到这块磁盘的文件容量大小。 2.配置磁盘配额步骤: 右键整块磁盘--属性--配额 3.提示这个错误&#xff1a;XXX用户上空间不足&#xff0c;需要XXMB来复制此项目&#xff0c;请删除或移动文件来…

跨平台桌面应用开发工具:electron的优缺点

跨平台桌面应用开发工具Electron是一个由GitHub开发和维护的开源框架&#xff0c;它允许开发者使用HTML、CSS和JavaScript等Web技术来构建跨平台的桌面应用程序。以下是关于Electron的详细介绍&#xff1a; 一、Electron概述 定义&#xff1a;Electron是一个基于Chromium和Nod…