RPC

核心: 远程方法调用

有两个微服务项目a,b,a中需要远程调用b的方法,通过rpc框架,a中只需要使用一个接口调用其方法,来实现调用到b中接口实现类的具体方法内代码

和本地方法调用相反,远程方法调用的方法体是在其他项目里,调用的项目中只存在一个接口

实现

服务提供方

  1. 接收网络请求:rpc框架内部启动tomcat来接收网络请求
  2. 处理网络请求:rpc框架中自定义一个servlet,通过service()来内部处理网络请求
  3. 网络请求内容:调用方的网络请求包含三部分内容:接口名,方法名,方法参数
  4. 执行服务调用:需要根据接口名找到其实现类执行方法体,通过本地注册表map来存储接口及其实现类,那么b中启动时就分为两步
    1. 将接口及其实现类添加到本地注册表
    2. 启动tomcat容器

服务调用方只需要按照参数规定构建http请求发送接收即可

服务调用方

本质是构建一次http请求,如何将其优化为只需要调用接口方法呢

-->只需要让接口有实现类,然后实现类的方法内部构建http请求

-->动态代理生成实现类,在invoke增强方法内获取参数构建http请求

注册中心

用于实现服务注册与发现,确保服务消费者和提供者之间的动态寻址和通信

核心为 共享数据,心跳机制,监听机制

想要不把服务提供方的ip地址写死,引入注册中心,将接口作为key,url组成list作为值进行存储

负载均衡实现?

比如将url组成的list取出,然后利用指定随机算法取出目标url

为什么要采用redis,nacos等单独项目

因为要保证注册中心的map是多线程共享的

注册中心还需要提供哪些实现?

心跳机制:如果一台主机挂掉,则需要到list中删除对应url

本地缓存,变更监控机制

采用注册中心,那调用方每发一次请求都需要到注册中心查数据,然后再发送请求,等于多了一次网络io

那么可以采用本地缓存存储map数据

为了保证数据一致性就需要给注册中心实现变更监控机制,保证map变更要同步本地缓存中的数据

注重点

  • 拓展性
    • 网络请求对象序列化接口应对多次序列化方式
    • 提供参数配置来启动不同类型的网络容器

拓展

报错重试机制

fengdongnan的博客 文章被收录于专栏

记录fengdongnan的知识产出文档,欢迎大家来一起交流学习

全部评论
mark
点赞 回复 分享
发布于 2025-04-17 17:30 安徽

相关推荐

1.pinia应用于什么样的状态场景,偏技术侧。抛开pinia有哪些状态场景(项目内容)2.组件传递状态场景,除了pinia(八股)3.provide的传递方式具体的怎么实现的(八股)4.provide和inject这两种方法的功能(八股)5.基于策略模式的组件化架构是怎么样的?举一个例子说(项目内容)6.这个策略大概配成什么样?实现什么样的功能?(项目内容)7.智能聊天客服模块是用AI进行对话的吗?(项目内容)8.流式的逐字展示是怎么实现的?(项目内容)9.为什么用websocket做实时通信(项目内容)10.流式输出除了websocket还有其他的实现方式吗?(八股)11.怎么理解基于路由映射的动态请求架构?(项目内容)12.统一鉴权是怎么做的?(项目内容)13.token存储除了localstroge还有哪里?(八股)14.为什么考虑放localstroge?(项目内容)15.localstroge还存啥了?(项目内容)16.localstroge不会很大吗?(项目内容)17.localstroge最大能存多大?(八股)18.万一超了呢?(项目内容)19.除了localstroge还知道哪些持久化缓存的内容?(八股)20.介绍一下Zod(项目内容)21.为什么要重构轮胎厂项目成vue3?(项目内容)22.怎么重构的?详细说说如何借助AI工具重构?(项目内容)23.总结出用AI coding的经验?(项目内容)24.知道spec coding这个概念吗?web coding呢?(八股)25.skill和mcp的区别?(八股)26.代码有多少是手写的,有多少是AI写的?27.CSS中的Flex布局怎么实现两侧布局?(八股)28.如何理解绝对定位和相对定位?(八股)29.实现一个二叉树的遍历(二叉树的结构:const node ={left: leftNode, right: rightNode, value: 'xx'})按照二叉树的结构输出所有的二叉树value
查看29道真题和解析
点赞 评论 收藏
分享
评论
6
25
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务