微服务调用 Feign 与负载均衡|学习笔记(二)

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
简介: 快速学习微服务调用 Feign 与负载均衡

开发者学堂课程【5天突破 Spring Cloud微服务调用 Feign 与负载均衡】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/781/detail/13702


微服务调用 Feign 与负载均衡


Feign 其实从底层无外乎做一个发送请求的工作,还涉及参数的构建工作,建链接的过程实际要依赖之前注入的东西查找匹配的服务名的服务地址。

比如之前有一百个订单服务器在注册中心里面,但是作为客户端输入 OrderService ,不一定这一百多台服务器都是正常的,比如有一台出问题了,只能查询99台地址,99台地址作为客户端调用方按照某种规则,如果后台服务很多,涉及负载均衡叫路由的算法,到底调用谁。

在实际代码中,注解底层完成了很多工作, Java 开发从 Spring Boot 开始就是各种简化,配服务名,就可以拉到匹配的服务,然后调用即可。

还要通过基础方式去声明一个后端代理,这个接口不能实例化,不能用接口直接创建对象,但是接口体现一种约束关系,比如功能约束,然后实现接口声明的行为,这是基本的编程原则。

只声明接口不创建对象体现了 Spring 框架在 Spring Boot2.5实战课讲的机制,Spring 早期解决一个问题叫依赖注入,对象创建不用在意,只需要负责定义一个接口定义实现类型,然后 Spring 框架自动会找注解,Client 会自动创建一个对象并赋值,该过程专业上叫注入, Spring 框架在很早之前就已经有这种功能了,还有一种说法叫 Spring 容器,帮助管理创建对象,像一个箱子、罐子一样,英语叫 content,因为其中放了很多对象,可以创建对象管理对象。Java 中很多容器的概念,里面可以装很多其他的东西,并且具备一定管理层面的框架这种特殊的工具类。

比如18,19行的例子就是典型的声明一个代理,拿接口去定义一个变量,实际没有直接的接口定义实现类型,这个地方是看不到的,但实际 Spring 框架自动会基于这个接口创建一个对象。这个底层原理就是构造一个能发送请求的对象,这个策略就是基于 Feign 拿到的服务可用的地址以及参数来构造客户端的代理,这个代理后续可以发送请求。从开发者角度,简化了很多功能。

image.png注意 Feign 里面 value代表服务名,一定要和注册中心之前注册的服务名要统一,它是基于服务名匹配可用的服务地址,不会乱匹配,是作为服务身份唯一一个关键条件,体现了作为调用方,服务提供的功能取决于在微服务接口已经实现的功能,也体现了接口的约束功能。对于接口约束后代,对于网络比较特殊,需要已经协商好通信协议以及参数和规则。

实现调用的话,注意配置文件跟之前的调用很相似,但是作为调用方主要做查询数据,注册方是被调用只需要注册不需要查询,写个代码(可以基于订单服务改个调用)重新创建。注意调用端后期可以升级负载均衡等。

(三)实战演练

1.新建一个 JavaSpringCloud03FeignDemo,Feign 的项主要完成调用

2.点击下一步,加入调试工具 Spring Boot DevTook 和 Spring Web,作为调用端还需要 Eureka Discovery Client 数据库,再搜索Feign 添加 OpenFeign(完成调用工作)

image.png3.然后下一步,相比之前加了一个 Feign,版本比较新是2.5,后期可以进行替换,点击 finish

稍微注意一下,这里面注册中心有两个微服务,项目完成以后这里面配置是空的。

然后看一下依赖,查看有多个依赖项,最主要的就是Feign,这里面依赖项都是 spring boot starter2.5.0说明这个项目就是基于之前 Spring Boot2.5迭代的,现在新版本还有一些迭代变化。查看最主要的 Feign 的几个包,core 使用的是10.10.1,实际是完成调用的主件。

这里面项目可以稍微改造,先改配置文件,直接拿之前那个项目复制粘贴,把名字改为 FeignClient 主要做注册调用,端口改为9001,注册中心地址无论客户端还是调用方都用政府找东西,配置编码改一下改为 UTF-8。改完代码如下:

image.png要完成一次调用需要造一个客户端代理,取名为 ClientProxy。看服务端一定要匹配涉及到方法的调用问题,里面有个 getOrder,再加一个暴露简单的 hello 返回字符串,再给个地址对外加个注解@Request Mapping 在网络上暴露接口,在网络上暴露地址是 hello,与前面8001组合一个地址,给一个简单的微服务接口,这里有服务一和服务二,添加以下代码:

@Request Mapping(“/ hello”)

public String hello() {

return “Spring Cloud Order Service 2021”;

服务2也可以复制粘贴以上代码,上回演示也是两台简单的,复制了一份就可以。

再看一下 proxy,同理加个 Feign,为了客户端代理运行,客户端代理声明一个 String ,可以和服务端名字一样,也可以适当改个名区分客户端与服务端,声明接口叫 ClientProxy,加个注解 Feign,Feign 里面有个很重要的参数 value 为注册中心服务名,服务名在配置中叫 OrderService,如果要传参,加个@Request Mapping 对应上。代码如下:

@FeignClient( value=“Order Service”)

public interface ClientProxy {

@RequestMapping(“/hello”)

public String hi()

怎么样知道是否能够调用成功,依靠地址 url,继续添加一个测试的类型取名 TestController,通过浏览器暴露 API,创造接口通过网络暴露。再创造变量,return 直接调用 hi,背后通过网络链接调微服务后台真正叫 hello 的方法,基于@Request Mapping 的 url 地址规则。

添加代码:

@RestController

public class TestController {

@Autowired

private ClientProxy clientproxy;

//这个变量没有真正的对象,运用了动量代理机制

@RequestMapping(“/hi”)

public String hi(){

return clientproxy.hi();

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
10月前
|
关系型数据库 MySQL 数据库
【MySQL基础篇】MySQL概述、Windows下载MySQL8.0超详细图文安装教程
在这一章节,主要介绍两个部分,数据库相关概念及MySQL数据库的介绍、下载、安装、启动及连接。接着,详细描述了MySQL 8.0的版本选择与下载,推荐使用社区版(免费)。安装过程包括自定义安装路径、配置环境变量、启动和停止服务、以及客户端连接测试。此外,还提供了在同一台电脑上安装多个MySQL版本的方法及卸载步骤。最后,解释了关系型数据库(RDBMS)的特点,即基于二维表存储数据,使用SQL语言进行操作,格式统一且便于维护。通过具体的结构图展示了MySQL的数据模型,说明了数据库服务器、数据库、表和记录之间的层次关系。
1879 56
【MySQL基础篇】MySQL概述、Windows下载MySQL8.0超详细图文安装教程
|
11月前
|
数据库 C# 开发者
ADO.NET连接到南大通用GBase 8s数据库
ADO.NET连接到南大通用GBase 8s数据库
|
编解码 JavaScript 前端开发
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
704 1
|
运维 安全 网络安全
自动化运维:使用Python脚本实现批量部署
【8月更文挑战第2天】在现代IT基础设施管理中,自动化运维成为提升效率、减少人为错误的关键。本文将通过一个实际的Python脚本示例,展示如何实现服务器的批量部署,包括环境准备、代码实现及执行过程。文章旨在为运维工程师提供一种简化日常任务的方法,同时强调安全性和可维护性的重要性。
|
API 开发者
《支付宝开放实验室申请与使用说明》
《支付宝开放实验室申请与使用说明》
381 13
|
人工智能 分布式计算 IDE
未来编程语言的演进趋势:多范式融合的新时代
本文探讨了编程语言发展的未来趋势,特别是多范式融合对软件开发的影响。在技术迅速发展的今天,编程语言不再局限于单一范式,而是向着功能性、面向对象、命令式等多种范式的融合发展。这种融合不仅提高了编程的灵活性和表达力,还促进了新技术的应用,如云计算、大数据处理和人工智能。文章通过分析现有编程语言的发展状态,预测了未来编程语言的几个关键特征,并讨论了这些变化对开发者和行业的潜在影响。
374 0
|
移动开发 开发工具 iOS开发
ios打包如何生成p12格式的证书和证书profile文件
做过H5多端开发ios app的同学们,肯定知道,打包ios应用,需要一个.p12后缀的ios打包证书和一个证书profile文件。 苹果官方提供的方法,生成这个证书需要苹果开发者账号和mac苹果电脑,但是我们大多数uniapp的开发者,都是使用windows电脑进行开发的,没有mac电脑,那么如何在windows电脑上生成ios证书呢?
1635 0
ios打包如何生成p12格式的证书和证书profile文件
|
网络协议 Linux 区块链
ESC使用体验
初次通过“高校学生在家实践”活动使用阿里云服务器,分享使用体验
ESC使用体验

热门文章

最新文章