码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • java 从零开始手写 RPC (00) 概览 overview


    rpc

    rpc 是基于 netty 实现的 java rpc 框架,类似于 dubbo。

    主要用于个人学习,由渐入深,理解 rpc 的底层实现原理。

    特性

    • 基于 netty4 的客户端调用服务端

    • p2p 调用

    • serial 序列化支持

    • timeout 超时处理

    • register center 注册中心

    • load balance 负载均衡

    • callType 支持 oneway sync 等调用方式

    • fail 支持 failOver failFast 等失败处理策略

    • generic 支持泛化调用

    • gracefully 优雅关闭

    • rpcInterceptor 拦截器

    • filter 过滤器

    • check 客户端启动检测服务是否可用

    • heartbeat 服务端心跳

    快速入门

    maven 引入

    <dependency>
        <groupId>com.github.houbbgroupId>
        <artifactId>rpc-allartifactId>
        <version>${rpc.version}version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    ps: 如果本地 p2p 测试,register 注册中心可选。

    测试

    注册中心

    RegisterBs.newInstance().start();
    
    • 1

    服务端

    ServiceBs.getInstance()
             .register(ServiceIdConst.CALC, new CalculatorServiceImpl())
             .registerCenter(ServiceIdConst.REGISTER_CENTER)
             .expose();
    
    • 1
    • 2
    • 3
    • 4

    客户端

    // 服务配置信息
    ReferenceConfig<CalculatorService> config = ClientBs.newInstance();
    config.serviceId(ServiceIdConst.CALC);
    config.serviceInterface(CalculatorService.class);
    // 自动发现服务
    config.subscribe(true);
    config.registerCenter(ServiceIdConst.REGISTER_CENTER);
    // 拦截器测试
    config.rpcInterceptor(new CostTimeInterceptor());
    
    CalculatorService calculatorService = config.reference();
    CalculateRequest request = new CalculateRequest();
    request.setOne(10);
    request.setTwo(20);
    
    CalculateResponse response = calculatorService.sum(request);
    System.out.println(response);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    前言

    工作至今,接触 rpc 框架已经有很长时间。

    但是对于其原理一直只是知道个大概,从来没有深入学习过。

    以前一直想写,但由于各种原因被耽搁。

    技术准备

    Java 并发实战学习

    TCP/IP 协议学习笔记

    Netty 权威指南学习

    这些技术的准备阶段,花费了比较长的时间。

    也建议想写 rpc 框架的有相关的知识储备。

    其他 rpc 框架使用的经验此处不再赘述。

    快速迭代

    原来一直想写 rpc,却不行动的原因就是想的太多,做的太少。

    想一下把全部写完,结果就是啥都没写。

    所以本次的开发,每个代码分支做的事情实际很少,只做一个功能点。

    陆陆续续经过近一个月的完善,对 rpc 框架有了自己的体会和进一步的认知。

    代码实现功能,主要参考 Apache Dubbo

    文档

    文档

    文档将使用 markdown 文本的形式,补充 code 层面没有的东西。

    代码注释

    代码有详细的注释,便于阅读和后期维护。

    测试

    目前测试代码算不上完善。后续将陆续补全。

    rpc 模块

    模块说明
    rpc-common公共代码
    rpc-register注册中心
    rpc-server服务端
    rpc-client客户端
    rpc-all全部引用模块(简化包引用)

    代码分支

    release_0.0.1-server 服务端启动

    release_0.0.2-client 客户端启动

    release_0.0.3-客户端调用服务端

    release_0.0.4-p2p 客户端主动调用服务端

    release_0.0.5-serial 序列化

    release_0.0.6-通用的反射调用

    release_0.0.7-timeout 超时处理

    release_0.0.8-register 注册中心

    release_0.0.9-load balance 负载均衡

    release_0.1.0-callType 调用方式

    release_0.1.1-fail 失败策略

    release_0.1.2-generic 泛化调用

    release_0.1.3-gracefully 优雅关闭

    release_0.1.4-rpcInterceptor 拦截器

    文档说明

    0.0.1-server 服务端启动

    0.0.2-client 客户端启动

    0.0.3-客户端调用服务端

    0.0.4-p2p 客户端主动调用服务端

    0.0.5-serial 序列化

    0.0.6-通用反射调用

    0.0.7-timeout 超时处理

    0.0.8-register 注册中心

    0.0.9-load balance 负载均衡

    0.1.0-callType 调用方式

    0.1.1-fail 失败策略

    0.1.2-generic 泛化调用

    0.1.3-gracefully 优雅关闭

    0.1.4-rpcInterceptor 拦截器

    测试代码

    从 v0.0.6 及其之后,为了让代码保持纯净,将测试代码全部放在 rpc-example。

    每个测试代码和实现版本一一对应。

  • 相关阅读:
    vue中wtach和computed的区别与联系
    用Python实现广度优先搜索
    Uniapp实现签名效果
    ChatGPT付费创作系统V2.4.9独立版 +WEB端+ H5端 + 小程序端系统测试安装教程
    全国护眼工程大会|2023山东哺光仪展|近视眼镜展|眼视光展
    Maven 密码加密
    【运维项目经历|027】PXE自动化部署与管理平台
    【学习笔记】ARC11123
    python opencv环境配置 保姆级教程
    使用ExcelJS快速处理Node.js爬虫数据
  • 原文地址:https://blog.csdn.net/ryo1060732496/article/details/136443384
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号