手写RPC框架(五)
v1.3
(启动器依旧使用1.2 1.3版本在启动服务版本上尚未做出大变动 主要是增加了方便学习的功能)
更新事项 以下更新均在非阻塞模块进行更新,阻塞模块可供读者自己尝试
使用注解方式 改造一下启动类 不分成这么多启动类直接
- 首先新创建了几个包 下面进行阐述下具体作用
1.功能调用模块
2.注解类 自定义两个注解
自定义注解代码
客户端启动注解
package annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;//注解 通过此注解可以判断当前是哪一个版本 选择调用哪个版本的客户端启动器 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface RpcClientBootStrap {String version(); }
服务端启动注解
package annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;//注解 通过此注解可以判断当前是哪一个版本 选择调用哪个版本的服务端启动器 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface RpcServerBootStrap {String version(); }
服务调用和实际进行判断的业务逻辑,下面代码就放客户端的,两者同理
服务调用
package service.call;import service.bootstrap.ClientBootStrap;import java.io.IOException;//通用启动类 将启动的逻辑藏在ClientBootStrap中 public class ClientCall {public static void main(String[] args) throws IOException {ClientBootStrap.start();} }
服务启动真正逻辑
package service.bootstrap;import annotation.RpcClientBootStrap;import consumer.bootstrap.NIOConsumerBootStrap10; import consumer.bootstrap.NIOConsumerBootStrap11; import consumer.bootstrap.NIOConsumerBootStrap12;import java.io.IOException;//之后启动直接在这边启动根据 在注解中配置对应的版本号 将相应的操作封装到之后的操作中即可 这样很方便 就是每次咱加一个启动器还得改下switch //比如说这里的version 1.2 就是v1.2版本的启动器 @RpcClientBootStrap(version = "1.1") public class ClientBootStrap {public static void start() throws IOException{//获取当前的注解上的版本然后去调用相应的远端方法 反射的方法//当前客户端启动器class对象Class<ClientBootStrap> currentClientBootStrapClass = ClientBootStrap.class;RpcClientBootStrap annotation = currentClientBootStrapClass.getAnnotation(RpcClientBootStrap.class);String currentVersion = annotation.version();//根据注解获得的版本进行判断是哪个版本 然后进行启动switch (currentVersion){case "1.0":NIOConsumerBootStrap10.main(null);break;case "1.1":NIOConsumerBootStrap11.main(null);break;case "1.2":NIOConsumerBootStrap12.main(null);break;default:System.out.println("太着急了兄弟,这个版本还没出呢!要不你给我提个PR");}} }
- 首先新创建了几个包 下面进行阐述下具体作用
利用ZK实现调用方法软负载均衡
对zookeeper节点注册进行修改,节点名就是对应的地址,对应的数据就是被调用的次数
zookeeper服务注册端修改
//因为这个地区属于一个临界区 可能会发生线程不安全问题 所以进行上
手写RPC框架(五)相关推荐
- 手写篇:如何手写RPC框架?
手写篇:如何手写RPC框架? 首先我们讲下什么是RPC? RPC(Remote Procedure Call)远程过程调用协议,他是一种通过网络从远程计算机程序请求服务.简单的来说,就是通过网络进行远 ...
- MyRPCDemo netty+jdk动态代理+反射+序列化,反序列化手写rpc框架
RPC RPC(remote procedure call)远程过程调用 RPC是为了在分布式应用中,两台主机的Java进程进行通信,当A主机调用B主机的方法时,过程简洁,就像是调用自己进程里的方法一 ...
- 第四篇 - 手写RPC框架
Github源码下载地址:https://github.com/chenxingxing6/myrpc 一.前言 RPC(Remote Procedure Call)-远程过程调用,它是一种通过网络从 ...
- 手写RPC框架(六)
v1.4 小更新 更新事项 暂定目标对启动类进行修改 直接集合 这个就直接看代码吧 不是特别难 难的地方我会点出来 启动引导类直接进行修改 可以传参 可以这样 当然 我想到了可以注解传参 注解构造 注 ...
- 手写RPC框架(十六)
v2.7 更新:实现CGLIB动态代理 实现CGLIB动态代理 实现一下统一调用代理类,创建总调用类,和对应模板接口,调用注解,同时在每个consumerbootstrap进行修改 对应模板接口 pa ...
- 手写RPC框架(八)
v1.6 热补丁,nio目前来看最后的完善,使用Curator简化zookeeper的操作,优化调用体验 使用Curator创建服务注册和服务发现类(是看快速开始速成的) 服务注册类实现代码 pack ...
- Marco's Java【Dubbo 之手写Dubbo框架实现远程调用】
前言 关于Dubbo入门的网上教程也特别多,因此我没有专门出关于Dubbo的系列博文(主要呢- 也是在忙些工作上的事儿),用Dubbo特别简单,但是想要把Dubbo学好,学精还得花费不少时间的,特别是 ...
- c++socket多个客户端通过不同端口与一个服务端通信_手写RPC,深入底层理解整个RPC通信...
一.前言 RPC,远程过程调用,调用远程方法像调用本地方法一样.RPC交互分为客户端和服务端,客户端调用服务端方法,服务端接收数据并打印到控制台,并response响应给客户端. RPC和HTTP的联 ...
- 手写RPC(一) 絮絮叨叨
目录 前言 我的知识库 学会了? 学不动了? 前言 提到RPC(Remote Procedure Call)大家应该都不陌生,特别是像我一样做web开发的,可以说天天和rpc打交道.常见的rpc框架主 ...
最新文章
- Oracle 11g 数据类型
- 克隆真人语音只要1句话,AI问诊超96.4%全科医生!科大讯飞年度黑科技大秀,余承东都来了...
- 语言模型“不务正业”做起目标检测,性能还比DETR、Faster R-CNN更好 | Hinton团队研究...
- 【shell】shuf命令,随机排序
- css3的动画特效--元素旋转(transition,animation)
- C语言学习之输入一个大于三的值判断是否为素数
- 使用dbms_stats.gather_table_stats调整表的统计信息
- 自己总结的sql基本操作
- chroma负载机恒压工作原理_双轴撕碎机结构有哪些部分组成?双轴撕碎机工作原理...
- sqllite开发安卓项目_安卓学习笔记(一)
- UVA10200 Prime Time【素数判定】
- 为什么线程池里的方法会执行两次_别以为线程池很简单,来回答下这些问题!...
- 二分查找-----非递归方式
- 微信小程序:wx.getUserInfo 接口的变动与使用
- DisplayTag汉化
- Unity播放服务器端视频 发布到Android移动端
- mongodb数据的导入导出备份恢复_万金油_新浪博客
- 亚马逊条码打印_使用亚马逊的条形码扫描仪轻松从手机上购买任何东西
- vue 中国省市区级联数据下拉工具
- 三星android怎么解锁屏幕旋转,三星S10如何设置打开应用自动旋转屏幕
热门文章
- GB51309实施后对于消防应急照明和疏散指示系统在城市隧道应用中的影响
- 【全记录】2017杭州·云栖大会阿里云服务专场
- 【IOS账号分享】《反叛公司》
- 前端 JavaScript -- 键盘按下松开事件
- 【服务器操作】centos7修改密码
- 显示杂谈(5)-DC调光与PWM调光
- 从屈辱的“捆绑式放映”到成为“绝地主义信仰“,只有火了40年的它做到了 | 钛空舱
- 解决本地Bootstrap字体图标不可见的问题
- 交通事故中的车辆外观损伤识别
- 水木行BT578串口蓝牙适配器 AT命令模式使用经验
- 手写篇:如何手写RPC框架?