RPC框架
gutou__yu
这个作者很懒,什么都没留下…
展开
-
Java反射(五) - 动态代理
# 动态代理可以在运行期动态创建某个 interface 的实例。首先我们先来看看我们平时如何静态的创建实例:定义接口:public interface Hello { void morning(String name);}编写实现类:public class HelloWorld implements Hello { public void morning(String name) { System.out.println("Good morning, "转载 2020-09-23 16:24:23 · 248 阅读 · 0 评论 -
Java反射(五) - 获取继承关系
获取继承关系获取父类的Class有了 Class 实例,我们还可以获取它的父类的 Class:public class Main { public static void main(String[] args) throws Exception { Class i = Integer.class; Class n = i.getSuperclass(); System.out.Println(n); Class o = n.getSup转载 2020-09-23 14:35:20 · 820 阅读 · 0 评论 -
Java反射(四) - 调用构造方法
调用构造方法我们通常使用 new 操作符创建新的实例:Person p = new Person();如果通过反射来创建新的实例,可以调用 Class 提供的 newInstance() 方法:Person p = Person.class.newInstance();调用Class.newInstance()的局限是,它只能调用该类的public无参数构造方法。如果构造方法带有参数,或者不是public,就无法直接通过Class.newInstance()来调用。为了调用任意的构造方法,转载 2020-09-23 14:18:07 · 455 阅读 · 0 评论 -
Java反射(三) - 调用方法
调用方法我们可以通过Class实例获取所有的Method信息。Class类提供了以下几个方法来获取Method:Method getMethod(name, Class...):获取某个public的Method(包括父类)Method getDeclaredMethod(name, Class...):获取当前类的某个Method(不包括父类)Method[] getMethods():获取所有public的Method(包括父类)Method[] getDeclaredMethods():转载 2020-09-23 14:05:23 · 168 阅读 · 0 评论 -
Java反射(二) - 访问字段
访问字段对于任意一个Object实例,只要我们获取了它的Class,就可以获取它的一切信息。Class 类提供了以下几个方法来获取字段:Field getField(name):根据字段名获取某个public的field(包括父类)Field getDeclaredField(name):根据字段名获取当前类的某个field(不包括父类)Field[] getFields():获取所有public的field(包括父类)Field[] getDeclaredFields():获取当前类的所有f转载 2020-09-23 11:42:16 · 258 阅读 · 0 评论 -
Java反射(一) - Class类
反射什么是反射?Java的反射是指程序在运行期可以拿到一个对象的所有信息。目的是为了什么?反射是为了解决在运行期,对某个实例一无所知的情况下,如何调用其方法。Class类学习反射,首先要学习Class类。除了int等基本类型以外,Java的所有其他类型全部都是class(包括interface)。class是由JVM在执行过程中动态加载的。JVM在第一次读取到一种class类型时,将其加载进内存。每加载一种class,JVM就为其创建一个 Class 类型的实例,并关联起来。public转载 2020-09-23 10:41:08 · 127 阅读 · 0 评论 -
从零实现一个RPC框架(七)- CompletableFuture
CompletableFuture在rpc框架中用到了 CompletableFuture,所以这篇文章主要讲一下 CompletableFuture。FutureCompletableFuture 是1.8引入的。public class CompletableFuture<T> implements Future<T>, CompletionStage<T>Completable 实现了 Future 接口和 CompletionStage接口。Futu原创 2020-09-23 17:55:47 · 323 阅读 · 0 评论 -
从零实现一个RPC框架(六)- Netty客户端Handler
Netty客户端Handler在 Netty 配置客户端端时,添加的真正处理业务逻辑的 NettyClientHandler 。概述NettyClientHandler 继承 ChannelInboundHandlerAdapter,覆写 channelRead、userEventTriggered、exceptionCaught三个方法。channelRead :处理服务端返回的数据,交由 CompletableFuture返回(下一篇会讲到 CompletableFuture)给代理方法。us原创 2020-09-23 16:50:25 · 736 阅读 · 0 评论 -
从零实现一个RPC框架(五)- 客户端代理调用
客户端代理调用因为服务在远程,所以想要让客户端像调用本地服务一样地调用远程服务,需要使用动态代理。关于动态代理,可以看我的另一篇文章:Java动态代理 这里不再赘述。代码实现 RpcClientProxy rpcClientProxy = new RpcClientProxy(rpcClient, rpcServiceProperties); // 拿到了 HelloService 接口的代理对象 HelloService helloService = rpcClientPro原创 2020-09-23 16:47:24 · 199 阅读 · 0 评论 -
从零实现一个RPC框架(四)- Netty服务端Handler
Netty服务端Handler在 Netty 配置服务端时,添加的真正处理业务逻辑的 NettyServerHandler 。概述NettyServerHandler 继承 ChannelInboundHandlerAdapter,覆写 channelRead、userEventTriggered、exceptionCaught三个方法。channelRead :处理接收到的数据,调用本地服务,并将结果发送会客户端。userEventTriggered:对Netty心跳检测时间进行处理,读超时的话原创 2020-09-22 17:16:38 · 418 阅读 · 0 评论 -
从零实现一个RPC框架(三)- ThreadLocal详解
ThreadLocal概述ThreadLocal和Synchronized都是为了解决多线程中相同变量的访问冲突问题,不同的点是:synchronized 是通过线程,牺牲时间来解决访问冲突TreadLocal 是通过每个线程单独一份存储空间,牺牲空间来解决冲突,并且相比于 synchronized ,ThreadLocal 具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外不能访问到想要的值。当某些数据是以线程为作用域并且不同线程具有不同的数据副本的时候,就可以考虑采用Threa原创 2020-09-22 15:40:50 · 350 阅读 · 0 评论 -
从零实现一个RPC框架(二) - 编、解码器
文章目录编、解码器kryo编、解码器kryo“Kryo 一般只用来进行序列化(然后作为缓存,或者落地到存储设备之中)、反序列化,而不用于在多个系统、甚至多种语言间进行数据交换 —— 目前 kryo 也只有 java 实现。”Reading and writing(读与写)Kryo有三组读写对象的方法。// 1. 如果不知道对象的具体类,且对象可以为null: kryo.writeClassAndObject(output, object);// ...Object object =原创 2020-09-22 15:39:43 · 128 阅读 · 0 评论 -
从零实现一个RPC框架(一)
文章目录从零实现一个RPC框架(一)架构工作流程技术选型项目骨架一、先搭Netty客户端和服务端从零实现一个RPC框架(一)仿照Dubbo,自己实现一个RPC框架。文章中只包含部分示例代码,完全代码请移步我的github:RPC框架的github地址架构工作流程服务端将服务注册到注册中心并且在服务端监听客户端请求。客户端在消费中心拿到服务,远程调用服务(发送一个request给服务端)。服务端根据request,调用对应的服务并将结果返回给客户端。客户端接收response,结束调用原创 2020-09-22 14:57:30 · 213 阅读 · 0 评论