谷粒商城学习笔记-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&…

插件更新了!

最近花了点时间&#xff0c;给网页插件添加了新功能&#xff0c;下面简单给大家介绍一下如何使用 我们安装好插件后&#xff0c;进入网页就可以看到一个带logo的按钮了&#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…

发那科机床联网串口配置

本文章仅针对无网口&#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;都会被记录得清…

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报…

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

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

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

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

鸿蒙 arkts 实现手机号中间四位隐藏, 可以使用 substring [ 简单适用新手 ]

1, 看效果 2, 直接cv代码就可以 Preview Entry Component struct Setting {Statephone:string 15555555555maskPhoneNumber(phone:string){const start phone.substring(0,3)const end phone.substring(7)return ${start}****${end}}build() {Column(){Text(this.maskPhon…

Leetcode2542-最大子序列的分数

1.问题转换 首先明确题意&#xff0c;要选取的值和num1&#xff0c;num2两个数组都有关&#xff0c;但是num1中选取的是k个数&#xff0c;num2中选取的是1个数&#xff0c;显然num2中的数所占的权重较大&#xff08;对结果影响较大&#xff09;&#xff0c;所以我们就可以对nu…

【Java探索之旅】多态:向上下转型、多态优缺点、构造函数陷阱

文章目录 &#x1f4d1;前言一、向上转型和向下转型1.1 向上转型1.2 向下转型 二、多态的优缺点2.1 多态优点2.2 多态缺陷 三、避免避免构造方法中调用重写的方法四、好的习惯&#x1f324;️全篇总结 &#x1f4d1;前言 在面向对象编程中&#xff0c;向上转型和向下转型是常用…

Django 新增数据 create()方法

1&#xff0c;添加模型 Test/app11/models.py from django.db import modelsclass Book(models.Model):title models.CharField(max_length100)author models.CharField(max_length100)publication_date models.DateField()price models.DecimalField(max_digits5, decim…

小米订单锐减背后的挑战与应对之道

近期&#xff0c;富士康印度子公司Bharat FIH面临高管离职、工厂关闭的困境&#xff0c;其背后原因之一是小米订单的显著下滑&#xff0c;据报道&#xff0c;这一降幅高达70%。这一现象不仅反映了富士康在印度市场的艰难处境&#xff0c;也揭示了小米在全球智能手机市场面临的挑…

六、数据可视化—Wordcloud词云(爬虫及数据可视化)

六、数据可视化—Wordcloud词云&#xff08;爬虫及数据可视化&#xff09; 也是一个应用程序 http://amueller.github.io/word_cloud/ Wordcloud词云&#xff0c;在一些知乎&#xff0c;论坛等有这样一些东西&#xff0c;要么做封面&#xff0c;要么做讲解&#xff0c;进行分析…

C++ | Leetcode C++题解之第223题矩形面积

题目&#xff1a; 题解&#xff1a; class Solution { public:int computeArea(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2) {int area1 (ax2 - ax1) * (ay2 - ay1), area2 (bx2 - bx1) * (by2 - by1);int overlapWidth min(ax2, bx2) - max…