谷粒商城学习笔记-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://www.mzph.cn/web/42244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鼠标录制工具|键鼠轨迹录制,实现自动办公

利用键鼠录制工具录制固定的鼠标点击、键盘输入等操作&#xff0c;实现自动化执行固定操作&#xff0c;节省时间。鼠标录制功能可以录制多步骤的操作&#xff0c;将录制的动作保存并命名&#xff0c;甚至可以编辑操作速度。下面将演示几种生活中常见的案例&#xff0c;详细讲解…

企业微信hook接口协议,移除群成员通知

移除群成员通知 返回示例 {"flag": 0, "receiver": 0, "sender_name": "", "is_room": 1, "server_id": 15318083, "send_time": 1687688952, "sender": 1688855749266556, "referid&…

k8s中使用cert-manager生成自签名证书

一、安装 cert-manager 注意查看cert-manager和K8S支持的对应版本 我的 k8sv1.28.2&#xff0c;cert-manager v1.12.11 下载 cert-manager.yaml 文件&#xff0c;执行 kubectl apply -f cert-manager.yaml二、生成自签名证书 cert-selfsigned.yaml apiVersion: cert-manage…

【SpringBoot】随机盐值+双重SHA256加密实战

目录&#xff1a; 1.SHA-256和随机盐值 2.前端实现 3.后端实现 1.SHA-256和Salt 1.1.什么是SHA-256 SHA-256是一种信息摘要算法&#xff0c;也是一种密码散列函数。对于任意长度的消息&#xff0c;SHA256都会产生一个256bit长的散列值&#xff08;哈希值&#xff09;&…

插件更新了!

最近花了点时间&#xff0c;给网页插件添加了新功能&#xff0c;下面简单给大家介绍一下如何使用 我们安装好插件后&#xff0c;进入网页就可以看到一个带logo的按钮了&#xff0c;我们可以点一下就可以跳出快捷操作 不同页面点击会出现不同的功能&#xff0c;大家可以根据自己…

dy商品评论采集

摘要 本文将详细介绍如何通过抖音商品评论采集来获取精准的用户反馈&#xff0c;从而优化产品和营销策略。通过这个指南&#xff0c;您将学会如何设置评论采集系统&#xff0c;分析用户评论数据&#xff0c;以及如何利用这些数据来吸引更多粉丝&#xff0c;增加商品销量。 返…

跨境传输需要遵守哪些准则,如何做到有效管控?

在全球化的商业环境中&#xff0c;跨国企业面临着数据跨境传输的挑战。随着业务的扩展&#xff0c;企业需要在不同国家和地区之间高效、安全地传输大量数据。选择合适的跨境传输方案对于保障数据安全、提高业务效率、遵守法律法规至关重要。 跨境传输数据需要遵守的准则和规定主…

Nginx:关于实现跨域代理

运维专题 Nginx&#xff1a;关于实现跨域代理 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.ne…

数据赋能(142)——开发:数据合并——技术方法、主要工具

技术方法 数据合并的技术方法主要包括以下几种&#xff1a; 轴向连接&#xff08;Concatenation&#xff09;&#xff1a; 使用pd.concat()函数&#xff0c;沿一个轴&#xff08;通常是行或列&#xff09;将多个DataFrame对象连接在一起&#xff0c;形成一个新的DataFrame对…

html自学笔记与面试会问到问题

第一章 1.1什么是JavaScript&#xff1f; 一各跨平台的脚本语言1.2ECMA特点&#xff1a; 由三大部分组成&#xff1a;核心语法(关键字、核心对象、语法)、DOM、BOM1.3 取余运算&#xff08;又叫取模运算&#xff09;&#xff1a; 取余&#xff1a;整除后&#xff0c;除不尽的…

发那科机床联网串口配置

本文章仅针对无网口&#xff0c;需要通过串口输出采集数据情况。跟这篇文章互为参考&#xff0c;一个理论&#xff0c;一个实战。 Fanuc DPRNT宏程序串口采集-CSDN博客 一、禁用机器串口监控 选择System、monit 二、设置参数可写 在MDI模式中字符面板上按OFS/SET键,连按致屏…

终于搞定了通过两路蓝牙接收数据

一直想做无线传感器&#xff0c;通过蓝牙来接收数据&#xff0c;无奈因为arduino接收串口数据的一些问题&#xff0c;一直搁到现在。因为学校里给学生开了选修课&#xff0c;所以手边有一些nano和mega可以使用&#xff0c;所以就做了用两个nano加上两个蓝牙模块来发射数据&…

经常用借呗和花呗对征信有影响吗?

说起支付宝里的花呗和借呗&#xff0c;大伙儿肯定都不陌生&#xff0c;它们俩就像是支付宝里的信用贷款双胞胎&#xff0c;名字相近&#xff0c;性格却大相径庭。现在&#xff0c;这俩兄弟都乖乖地接入了央行的征信大家庭&#xff0c;你的每一次使用&#xff0c;都会被记录得清…

GEE代码实例教程详解:湖泊水位变化监测

简介 本篇博客将介绍如何使用Google Earth Engine (GEE) 对湖泊水位变化进行监测。通过MODIS数据集&#xff0c;我们可以识别2001年和2023年的湖泊范围&#xff0c;并计算湖泊的高程变化。 背景知识 MODIS数据集 MODIS/061/MOD09Q1数据集提供了MODIS的地表反射数据&#xf…

DDD架构

1.DDD架构的概念&#xff1a; 领域驱动设计&#xff08;Domain-Driven Design, DDD&#xff09;是一种软件设计方法&#xff0c;旨在将软件系统的设计和开发焦点集中在领域模型上&#xff0c;以解决复杂业务问题 2.DDD架构解决了什么问题: 在以前的mvc架构种&#xff0c;三层结…

产品经理-交互设计动手实践(11)

业内有很多画交互的工具&#xff0c;这里不过多介绍&#xff0c;互联网公司最常用的工具是Axure,墨刀,蓝湖,小瀑 它是一个专业的快速原型设计工具&#xff0c;使用它能够快速创建线框图、流程图、原型和规格说明文档。 它能快速、高效地创建原型&#xff0c;同时支持多人协作设…

华为HCIP Datacom H12-821 卷30

1.单选题 以下关于OSPF协议报文说法错误的是? A、OSPF报文采用UDP报文封装并且端口号是89 B、OSPF所有报文的头部格式相同 C、OSPF协议使用五种报文完成路由信息的传递 D、OSPF所有报文头部都携带了Router-ID字段 正确答案&#xff1a;A 解析&#xff1a; OSPF用IP报…

iOS 开发中不常见的专业术语

乐此不疲地把简单的问题复杂化&#xff0c;并把这种XX行为叫作专业 APM 在 iOS 开发中&#xff0c;APM 代表 Application Performance Management&#xff08;应用性能管理&#xff09;。APM 是一套监控和管理应用程序性能的工具和技术&#xff0c;旨在确保应用程序运行平稳、…

【人工智能】-- 法律与伦理

个人主页&#xff1a;欢迎来到 Papicatch的博客 课设专栏 &#xff1a;学生成绩管理系统 专业知识专栏&#xff1a; 专业知识 文章目录 &#x1f349;引言 &#x1f349;伦理问题 &#x1f348;隐私泄露问题 &#x1f34d;人工智能与隐私泄露的紧密关联 &#x1f34d;数…

上海慕尼黑电子展开展,启明智显携物联网前沿方案亮相

随着科技创新的浪潮不断涌来&#xff0c;上海慕尼黑电子展在万众瞩目中盛大开幕。本次展会汇聚了全球顶尖的电子产品与技术解决方案&#xff0c;成为业界瞩目的焦点。启明智显作为物联网彩屏显示领域的佼佼者携产品亮相展会&#xff0c;为参展者带来了RTOS、LINUX全系列方案及A…