从0到1手把手实现RPC|01 RpcProvider本地实现

RPC的简化版原理如下图(核心是代理机制)。

在这里插入图片描述

  • 1.本地代理存根: Stub
  • 2.本地序列化反序列化
  • 3.网络通信
  • 4.远程序列化反序列化
  • 5.远程服务存根: Skeleton
  • 6.调用实际业务服务
  • 7.原路返回服务结果
  • 8.返回给本地调用方

注意处理异常。

RpcProvider的本地实现

1、工程结构
  • rpc-core是核心实现类
  • rpc-demo-api是定义实际业务服务的接口
  • rpc-demo-provider是业务接口实现类

在这里插入图片描述

2、RpcProvider在启动过程中把@RpcProvider标记的方法存到Map中去

在启动时加载配置
在这里插入图片描述

在配置中创建启动类
在这里插入图片描述

启动类在创建的过程,会将带有@RpcProvider注解的类存放到Map中。
@PostConstruct注解可以在bean的初始化后进行执行,刚好满足我们的常见(存储bean)
使用 ApplicationContextAware接口是为了获取Spring的应用上下文ApplicationContext,从里面获取bean。
在这里插入图片描述

RpcProvider是自定义的一个注解,用来表示这个类是一个服务提供者。
在这里插入图片描述

一个服务提供者,订单服务实现类。
在这里插入图片描述

3、在调用的时候通过方法名称找到应该调用的方法,通过反射完成调用。

发起一个http请求调用,获取订单信息。
在这里插入图片描述

RpcRequest封装请求参数,包括:接口名称、方法名、参数。
在这里插入图片描述

一个请求入口

在这里插入图片描述

请求调用,根据服务全限定名(就是一个类的全名)去map存找对应的类,找到后,通过反射发起方法调用。
在这里插入图片描述

响应类RpcResponse统一封装结果,返回状态,响应结果数据。
在这里插入图片描述

实际的调用结果,就成功了。
在这里插入图片描述

4、有哪些问题?

如果一个接口有多个实现类怎么办?
错误消息怎么处理?
方法有多个重载方法怎么办?

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

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

相关文章

xss.haozi.me靶机 通关

0x00 没有任何过滤可以直接注入<img srcx οnerrοralert(1)> 0x01 使用了testarea标签将我们的输入内容以普通的字符串进行展示 但是我们可以将标签进行闭合 </textarea><img srcx οnerrοralert(1)> 0x02 我们依然可以先闭合之后添加属性a" οncl…

word[::-1] for word in s.split()得到的是一个列表

你可以将上述的列表推导式代码拆分为更明确的几个步骤&#xff0c;如下所示&#xff1a; # 原始字符串 s "hello world" # 使用 split() 方法将字符串分割成单词列表 words s.split() # 创建一个空列表&#xff0c;用于存储反转后的单词 reversed_words [] # 遍历…

npm与Maven:前端与后端构建工具深度对比学习

文章目录 npm与Maven&#xff1a;前端与后端构建工具深度对比学习引言一、基础概念与起源1.1 npm简介&#xff1a;定义与在Node.js生态中的角色及其发展历程1.2 Maven简介&#xff1a;设计理念“约定优于配置”及在Java生态系统中的地位与应用范围二、核心功能对比分析2.1 依赖…

对于两个独立随机变量X,Y, E(XY)=E(X)E(Y)

两个独立随机变量X&#xff0c;Y的期望分别是E(X), E(Y), 其乘积XY的期望是多少&#xff1f; 我们可以利用期望的性质来求得XY的期望。由于X、Y是独立随机变量&#xff0c;因此它们的协方差为0&#xff0c;即&#xff1a; cov(X, Y) E(XY) - E(X)E(Y) 0 因此&#xff0c; …

Java17 --- SpringCloud之Consul

目录 一、consul的使用 1.1、主要功能 1.2、安装及运行 1.3、添加微服务到consul 1.3.1、8001微服务添加相关pom、配置文件、注解 1.3.2、80微服务添加相关pom、配置文件、注解 1.4、三个注册中心异同 1.5、consul进行分布式配置 1.5.1、修改8001的yml配置文件 1.5.2…

数字化运营在教育行业的技术架构实践总结

随着科技的不断进步和数字化时代的到来&#xff0c;教育行业也正面临着数字化转型的挑战和机遇。教育行业的数字化运营需要依靠合理的技术架构来支撑&#xff0c;本文将探讨教育行业数字化运营的技术架构设计。 ## 第一步&#xff1a;需求分析和架构设计 在构建教育行业数字化…

SpringMVC08、Json

8、Json 8.1、什么是JSON&#xff1f; JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式&#xff0c;目前使用特别广泛。采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和…

Windows更改MySQL-8的数据库数据存放位置

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、为什么要用8.x版本&#xff1f;二、为什么要更改存放位置三、开始操作1.断开Client并关闭Server2.找到Data目录3.创建备份目录4.更改配置文件5.更改注册表6…

华为OD面试分享13(2024年)

华为OD面经 二战失败选手,双非一本部门目标院校,数学与应用数学专业,无相关工作经验也没有什么拿得出手的项目。3月中旬开始重新学java(大学里有学过一个学期的java,很水)。期间经常通宵肝,学习框架、刷leedcode,可能是因为数学专业出身,数据结构和算法这一块学起来并…

leetcode299--猜数字游戏

1. 题意 给两个数组&#xff0c;一个是正确答案&#xff0c;一个是猜出的答案&#xff1b; 求猜出的答案中正确位置字符的个数&#xff0c;和错误位置正确字符的位置。 猜数字游戏 2. 题解 直接模拟即可。 当两个串匹配时&#xff0c;公牛数自增&#xff1b;否则分别统计…

LeetCode 173.二叉搜索树迭代器

实现一个二叉搜索树迭代器类BSTIterator &#xff0c;表示一个按中序遍历二叉搜索树&#xff08;BST&#xff09;的迭代器&#xff1a; BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在…

探索机器学习的无限可能性:从初学者到专家的旅程

探索机器学习的无限可能性&#xff1a;从初学者到专家的旅程 在当今数字时代&#xff0c;机器学习无疑是最引人注目的技术之一。它已经深入到我们生活的方方面面&#xff0c;从个性化推荐到自动驾驶汽车&#xff0c;再到医疗诊断和金融预测。但是&#xff0c;即使我们已经见证…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:RotationGesture)

用于触发旋转手势事件&#xff0c;触发旋转手势的最少手指为2指&#xff0c;最大为5指&#xff0c;最小改变度数为1度。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 接口 RotationGesture(value?: …

三、N元语法(N-gram)

为了弥补 One-Hot 独热编码的维度灾难和语义鸿沟以及 BOW 词袋模型丢失词序信息和稀疏性这些缺陷&#xff0c;将词表示成一个低维的实数向量&#xff0c;且相似的词的向量表示是相近的&#xff0c;可以用向量之间的距离来衡量相似度。 N-gram 统计语言模型是用来计算句子概率的…

docker 子网

当需要给容器分配指定 ip &#xff0c;为避免ip 冲突&#xff0c;指定容器子网处理 创建 subnet 子网 docker network create --subnet 10.0.0.0/24 --gateway 10.0.0.1 subnet-testdocker network ls NETWORK ID NAME DRIVER SCOPE ... f582ecf297bc sub…

vs2022的下载及安装教程(Visual Studio 2022)

vs简介 Visual Studio在团队项目开发中使用非常多且功能强大&#xff0c;支持开发人员编写跨平台的应用程序;Microsoft Visual C 2022正式版(VC2022运行库)&#xff0c;具有程序框架自动生成&#xff0c;灵活方便的类管理&#xff0c;强大的代码编写等功能&#xff0c;可提供编…

面向对象——设计模式

一、23中设计模式 口诀&#xff1a;公司模姐、四桥组装外箱带 &#xff08;一&#xff09;创建型5种 1、类 &#xff08;1&#xff09;工厂方法模式* &#xff08;工厂模式&#xff09; &#xff08;*的是以前软考没考过的&#xff09; Factory Method 2、方法 &#…

HIVE伪分布安装

引言 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,类似于RDBMS(关系型数据库,如MySQL、Oracle、PgSQL),并提供类SQL的查询功能。 实验准备 1.搭建好伪分布安装模式的Hadoop的虚拟机,并配置了Linux网络。(可看我前面发布的文章) 2.apache…

springboot报错驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接,解决方式

起因&#xff1a;今天发布程序&#xff0c;本地测试没有问题但是部署到服务器上报&#xff1a;驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS…

Windows系统安装Tomcat并结合内网穿透实现公网访问本地网页

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 前言 Tomcat作为一个拥有强大功能的轻量级服务器&#xff0c;由于其可以实…