`

rpc学习

阅读更多

源码地址: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-RPC(XML Remote Procedure Call)是一种轻量级的远程过程调用协议,它使用XML来编码调用数据,并通过HTTP进行传输。XML-RPC使得运行在不同操作系统上的应用程序...

    zookeeper+rpc学习demo

    结合Java和Zookeeper进行RPC学习,可以创建一个简单的服务提供者和服务消费者,通过Zookeeper进行服务注册和发现,使用RPC框架进行跨进程通信。"J2EE 分布式服务的基础(上)-v4"这个文件可能包含了这部分内容的讲解...

    RPC学习笔记

    RPC(Remote Procedure Call,远程过程调用)是一种分布式计算技术,它允许一个程序在一台计算机上执行一个在另一台计算机上的程序,就像本地调用一样。RPC建立在Socket之上,为程序员提供了一种透明的方式来调用...

    RPC学习文档

    ### RPC学习文档知识点详解 #### 一、RPC概念与应用场景 **远程过程调用(Remote Procedure Call,简称RPC)**是一种通信协议,它允许在一台计算机上运行的程序调用另一台计算机上的子程序,而程序员无需显式了解...

    RPC 学习参考资料

    RPC,即Remote Procedure Call Protocol,是一种允许程序通过网络调用远程计算机上的函数或方法的协议。这个协议使得程序员可以忽略底层网络技术的复杂性,专注于应用程序的逻辑,从而简化了分布式系统的开发。RPC...

    rpc学习资料

    4. **简单RPC实现**:在学习简单的RPC应用时,我们可能会从零开始构建一个小型的框架,这包括定义服务接口、实现服务提供者、创建服务消费者以及搭建网络通信机制(如基于Socket或HTTP)。 5. **服务接口**:RPC的...

    RPC入门学习笔记

    RPC(Remote Procedure Call)远程过程调用是一种网络通信协议,允许一台计算机上的程序调用另一台计算机上的程序,就像调用本地函数一样简单。在分布式系统中,RPC扮演着核心角色,使得各服务之间能够方便地进行...

    RPC简单学习文档

    RPC(远程过程调用协议)是分布式计算领域中的一个核心概念,它允许程序在不同的系统间进行通信,就像调用本地方法一样简单。通过RPC,客户端可以透明地执行远程服务器上的函数,而无需关心网络通信的细节。这种协议...

    rpc-Remote Procedure Call源码2

    回到给定的文件列表,我们可以推测这些文件可能是RPC学习的示例项目,包括`rpcintro2.sln`(可能是一个Visual Studio解决方案文件),以及`ContextExample`、`ContextExampleServer`和`ContextExampleClient`这三...

    手写rpc rpc简单源码 rpc源码学习 rpc过程了解 rpc通信原理

    三、手写RPC源码学习 在手写RPC的过程中,我们需要关注以下几个关键步骤: 1. **接口定义**:定义客户端和服务端共享的接口,这通常是通过idl(Interface Definition Language)完成。 2. **序列化/反序列化实现*...

    oncrpc.rar_RPC. VC++_oncrpc windows_windows RPC_ycnian的博客

    RPC(Remote Procedure Call)是一种分布式计算技术,允许一个程序在一台计算机上执行远程操作,就像它在本地执行一样...通过学习和实践,开发者可以更好地掌握分布式系统中的跨进程通信,提升软件的可扩展性和可靠性。

    rpc-test-study.zip

    在"rpc-test-study.zip"这个压缩包中,我们推测可能包含了一个关于RPC学习和测试的项目或者教程。可能的内容可能包括源代码、文档、测试用例等,用于帮助开发者理解和实现RPC机制。 RPC的基本流程如下: 1. **...

    RPC 框架学习 好的参考学习

    RPC(Remote Procedure Call)框架...总结,RPC框架是构建分布式系统的关键技术,QiuRPC作为一个开源的RPC框架,提供了学习和实践的机会。通过深入学习其源码,可以增强对RPC原理的理解,同时为解决实际问题提供思路。

    LabVIEW XML-RPC

    - 使用示例程序学习和理解XML-RPC的工作原理,然后根据实际需求进行自定义开发。 - 定期检查和更新XML-RPC库,以利用最新的功能和修复的已知问题。 总之,LabVIEW XML-RPC提供了强大的工具,使得LabVIEW开发者...

    Netty4.1实战-手写RPC框架.pdf

    本专题主要通过三个章节实现一个rpc通信的基础功能,来学习RPC服务中间件是如何开发和使用。章节内以源码加说明实战方式来讲解,请尽可能下载源码学习。 - 手写RPC框架第一章《自定义配置xml》 - 手写RPC框架第二章...

    入门级RPC框架源码学习

    本资源是针对入门级RPC框架的源码学习,包含了学习过程中的一些流程图,对理解RPC的工作原理和实现机制非常有帮助。 首先,我们来看看“mongo”这个标签,它通常指的是MongoDB,一个流行的NoSQL数据库。在RPC框架中...

    Java RPC调用示例

    Java RPC(Remote Procedure Call)调用是分布式系统中常见的通信方式,它允许一个程序在不关心远程...在"RpcTest"这个示例中,我们可以深入学习这些概念并实践一个简单的RPC框架,从而加深对分布式系统通信的理解。

    高性能RPC框架 nfs-rpc

    RPC(Remote Procedure Call)是一种进程间通信机制,它允许一个程序调用另一个位于不同系统上的程序,就像调用本地函数一样。...通过学习和研究NFS-RPC,开发者可以更好地理解和构建大规模、高性能的分布式系统。

    基于C++语言实现一个RPC分布式网络通信框架项目,使用CMake在Linux平台上构建编译环境

    本项目旨在基于C++语言实现一个RPC分布式网络通信框架项目,使用CMake在Linux平台上构建编译环境。它可以将任何单体架构系统的本地方法调用重构为基于TCP网络的RPC远程方法调用。该框架实现了同一台机器的不同进程...

    RPC-code_rpc_

    通过这个项目,你可以学习到如何使用Thrift和RMI这两种不同的RPC实现方式,理解它们的工作原理,以及如何在实际项目中应用它们来构建高效、可靠的分布式系统。同时,对于比较Thrift和RMI的优缺点,以及在不同场景下...

Global site tag (gtag.js) - Google Analytics