源码地址:https://github.com/feijian8/rpc
1、rpc-registry
a、提供服务注册服务接口
ServiceRegistry提供了zookeeper中服务的注册服务,通过创建ZkClient对象,注册需要的服务目录和创建临时的服务的属性ip+port,数据结构如下:
/**
* zk中数据的实例:
* [zk: localhost:2181(CONNECTED) 20] ls /registry/com.xxx.rpc.sample.api.HelloService
*
* [address-0000000001]
*
* ��t127.0.0.1:8001
*/
b、提供服务发现服务接口
ServiceDiscovery提供了zookeeper中服务的发现服务,通过ZkClient对象,发现service对象包名对应的服务地址,如果只有一个微服务,那么直接返回该服务对应的ip和port就ok了,否者,返回几个微服务中的随机一个服务的ip和port就ok
,包名对应的服务地址如下:[zk: localhost:2181(CONNECTED) 43] ls /registry/com.xxx.rpc.sample.api.HelloService-sample.hello2 [address-0000000002, address-0000000003, address-0000000004]。
2、rpc-registry-zookeeper
该项目实现了rpc依赖于zookeeper的服务对于项目微服务的注册和发现。
3、rpc-common
a、RpcRequest:封装了rpc请求的body体。
RpcResponse:封装了rpc返回的响应消息体。
b、RpcDecoder:提供rpc的解码器。
RpcEncoder:提供rpc的编码器。
c、SerializationUtil:基于 Protostuff 实现了对象的序列化工具。
4、rpc-client
a、RpcClient:主要提供通过ip和port创建netty的tcp连接,发送RpcRequest请求数据到指定的服务地址,返回需要的RpcResponse对象给RpcProxy。
b、RpcProxy:通过动态代理获取servicename,使用ZooKeeperServiceDiscovery获取zk中存储的微服务的ip和port,然后使用ip+port构建需要RpcClient,发送请求的RpcRequest对象到微服务地址,返回需要的RpcResponse对象,
最后通过泛型传入的对象,返回外部接口方法对象给客户端。
其中RpcProxy中可以直接通过servicename返回消息body,也可以通过serviceName+serviceVersion不同版本的接口返回不同的消息body,适用用版本的不断迭代开发过程。
这样就完成rpc整个调用过程!
5、rpc-server
a、RpcServer:提供了rpc服务的发布,通过spring的注解,扫描包含RpcService注解的类并初始化,初始化rpc注解的服务到zk中,通过调用rpc-registry的服务,注册rpc服务。
b、创建并初始化 Netty 服务端 Bootstrap 对象的时候针对请求和响应对象添加解码和编码处理,同时设置处理业务handler,通过反射获取service的method和parameter,执行完后,封装到response返回给rpc的client端。
c、rpcserver处理业务是异步处理,
6、rpc-sample-api
简单的bean类,定义了接口和辅助的model类,给客户端提供了接口声明。
7、rpc-sample-client
a、rpc的客户端调用示例代码,模拟实现了rpc的客户端请求过程,通过RpcProxy获取RpcClient实例,调用send就可以通过netty的nio长连接通道发送消息到服务器,返回结果RpcResponse给客户端展示。
b、2,3,4分别演示了不同参数传递和多线程处理。
8、rpc-sample-server
a、演示了RpcBootstrap启动rpc的server,然后server加载rpc的registry注册包含@RpcService的注解到zk中,暴露服务接口给客户端调用。
相关推荐
### XML-RPC学习心得 #### 一、XML-RPC简介 XML-RPC(XML Remote Procedure Call)是一种轻量级的远程过程调用协议,它使用XML来编码调用数据,并通过HTTP进行传输。XML-RPC使得运行在不同操作系统上的应用程序...
结合Java和Zookeeper进行RPC学习,可以创建一个简单的服务提供者和服务消费者,通过Zookeeper进行服务注册和发现,使用RPC框架进行跨进程通信。"J2EE 分布式服务的基础(上)-v4"这个文件可能包含了这部分内容的讲解...
RPC(Remote Procedure Call,远程过程调用)是一种分布式计算技术,它允许一个程序在一台计算机上执行一个在另一台计算机上的程序,就像本地调用一样。RPC建立在Socket之上,为程序员提供了一种透明的方式来调用...
### RPC学习文档知识点详解 #### 一、RPC概念与应用场景 **远程过程调用(Remote Procedure Call,简称RPC)**是一种通信协议,它允许在一台计算机上运行的程序调用另一台计算机上的子程序,而程序员无需显式了解...
RPC,即Remote Procedure Call Protocol,是一种允许程序通过网络调用远程计算机上的函数或方法的协议。这个协议使得程序员可以忽略底层网络技术的复杂性,专注于应用程序的逻辑,从而简化了分布式系统的开发。RPC...
4. **简单RPC实现**:在学习简单的RPC应用时,我们可能会从零开始构建一个小型的框架,这包括定义服务接口、实现服务提供者、创建服务消费者以及搭建网络通信机制(如基于Socket或HTTP)。 5. **服务接口**:RPC的...
RPC(Remote Procedure Call)远程过程调用是一种网络通信协议,允许一台计算机上的程序调用另一台计算机上的程序,就像调用本地函数一样简单。在分布式系统中,RPC扮演着核心角色,使得各服务之间能够方便地进行...
RPC(远程过程调用协议)是分布式计算领域中的一个核心概念,它允许程序在不同的系统间进行通信,就像调用本地方法一样简单。通过RPC,客户端可以透明地执行远程服务器上的函数,而无需关心网络通信的细节。这种协议...
回到给定的文件列表,我们可以推测这些文件可能是RPC学习的示例项目,包括`rpcintro2.sln`(可能是一个Visual Studio解决方案文件),以及`ContextExample`、`ContextExampleServer`和`ContextExampleClient`这三...
三、手写RPC源码学习 在手写RPC的过程中,我们需要关注以下几个关键步骤: 1. **接口定义**:定义客户端和服务端共享的接口,这通常是通过idl(Interface Definition Language)完成。 2. **序列化/反序列化实现*...
RPC(Remote Procedure Call)是一种分布式计算技术,允许一个程序在一台计算机上执行远程操作,就像它在本地执行一样...通过学习和实践,开发者可以更好地掌握分布式系统中的跨进程通信,提升软件的可扩展性和可靠性。
在"rpc-test-study.zip"这个压缩包中,我们推测可能包含了一个关于RPC学习和测试的项目或者教程。可能的内容可能包括源代码、文档、测试用例等,用于帮助开发者理解和实现RPC机制。 RPC的基本流程如下: 1. **...
RPC(Remote Procedure Call)框架...总结,RPC框架是构建分布式系统的关键技术,QiuRPC作为一个开源的RPC框架,提供了学习和实践的机会。通过深入学习其源码,可以增强对RPC原理的理解,同时为解决实际问题提供思路。
- 使用示例程序学习和理解XML-RPC的工作原理,然后根据实际需求进行自定义开发。 - 定期检查和更新XML-RPC库,以利用最新的功能和修复的已知问题。 总之,LabVIEW XML-RPC提供了强大的工具,使得LabVIEW开发者...
本专题主要通过三个章节实现一个rpc通信的基础功能,来学习RPC服务中间件是如何开发和使用。章节内以源码加说明实战方式来讲解,请尽可能下载源码学习。 - 手写RPC框架第一章《自定义配置xml》 - 手写RPC框架第二章...
本资源是针对入门级RPC框架的源码学习,包含了学习过程中的一些流程图,对理解RPC的工作原理和实现机制非常有帮助。 首先,我们来看看“mongo”这个标签,它通常指的是MongoDB,一个流行的NoSQL数据库。在RPC框架中...
Java RPC(Remote Procedure Call)调用是分布式系统中常见的通信方式,它允许一个程序在不关心远程...在"RpcTest"这个示例中,我们可以深入学习这些概念并实践一个简单的RPC框架,从而加深对分布式系统通信的理解。
RPC(Remote Procedure Call)是一种进程间通信机制,它允许一个程序调用另一个位于不同系统上的程序,就像调用本地函数一样。...通过学习和研究NFS-RPC,开发者可以更好地理解和构建大规模、高性能的分布式系统。
本项目旨在基于C++语言实现一个RPC分布式网络通信框架项目,使用CMake在Linux平台上构建编译环境。它可以将任何单体架构系统的本地方法调用重构为基于TCP网络的RPC远程方法调用。该框架实现了同一台机器的不同进程...
通过这个项目,你可以学习到如何使用Thrift和RMI这两种不同的RPC实现方式,理解它们的工作原理,以及如何在实际项目中应用它们来构建高效、可靠的分布式系统。同时,对于比较Thrift和RMI的优缺点,以及在不同场景下...