`
ldd600
  • 浏览: 103577 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
47bb354f-8b5f-3ea6-a206-c7ead38c741c
Hyperic插件开发不完...
浏览量:11255
社区版块
存档分类
最新评论

通用RPC简易框架(2): 重要模块

阅读更多

重要模块

传参,序列化,反序列化机制

参数格式

AgentRequest

参数名

参数说明

类名

远程类的类名,包括包路径,String

方法名

远程方法的名字,String

方法参数

远程方法的所有参数,List

会话控制ID

每次远程方法调用会话的唯一标识,UUID

 

AgentResponse

参数名

参数说明

会话控制ID

每次远程方法调用会话的唯一标识,UUID

执行结果

远程方法的返回值,Object

异常

远程方法调用时出现的异常,Throwable

方法参数在添加时,顺序要和远程方法一致,并且方法参数和执行结果在clientserver端的classpath上都存在,并且需要保持一致。这样序列化和反序列化才能正常进行,如果采用定制系统,可由业务开发人员自己实现。

 

序列化,反序列化机制:

可以定制,默认采用XStream

 

负载均衡

JMS方式可以让同一个agent group的所有agent server都监听在同一个queue上,这是一个简单的负载均衡结构。 是由JMS提供商实现的。

 

其他的方式采用简单的client side实现,结构如图

 

client端每个agentGroup维护一个循环链表存放所有activeagent,用另外一个链表维护所有inactiveagents ,如果在调用的过程中发现某个agent不可达,发生connection error,比如出现SocketException,就判定这个agent不可达,并从active agent链表中移到inactive agent的链表中。在后台还会schedule一个线程周期性地检测inactive链表中的agent是否已经可达,agent server可以提供一个isHealthy方法。如果可达的话,就从inactive链表中移到active链表中。

 

 

 

同步, 异步远程调用

如果业务逻辑对远程调用的执行结果依赖性很强,或者业务逻辑上的调用需要同步,可以使用同步远程调用。异步远程调用可以提高系统的吞吐率。

 

HTTP

同步:HTTP是一种同步通信协议,client端可以用HTTPComponent,现在HTTPClient也属于它的一个子项目。

异步:由于非阻塞IO的出现,出现了很多frameworksocket异步通信的支持。Apache HTTP Component就是其中一个,今年发布了GA release版本。用它可以方便地实现HTTP的异步通信。大体原理如下图所示:

 

 

 

JMS:

同步:可以用jmsTemporaryQueue作为同步调用的信道。JmsExecutor创建一个TemporaryQueuetempQueue,然后再发送agentRequest到业务逻辑指定的QueuebusiessQueue中,接着JmsExecutor监听在这个TemporaryQueue上,agent server监听在这个busiessQueue上,收到消息后执行agent server端业务逻辑,并将agentResponse发送到tempQueue中,JmsExecutor得到执行结果,然后删除tempQueue

异步:JMS本身就是一种异步通信方式

 

RMI

同步:RMI是一种同步调用方式

异步:需要自己实现Reactor/Connector模式 实现方式类似HTTP的异步结构图。

 

业务逻辑调用者

业务逻辑调用可以用java反射实现。

 

Agent上下文

ThreadLocal实现

 

异常处理

如果在远程业务逻辑调用的过程中异常,并抛出到Agent server中,传回到客户端,由客户端处理。

 

源代码:

过两天整理好了补上。

 

分享到:
评论
1 楼 bluemusic 2010-05-07  
等大哥源码

相关推荐

    手写RPC框架,说明:https://blog.csdn.net/lan861698789/article/details/103837228

    首先,理解RPC框架的基本流程至关重要。当客户端发起一个RPC调用时,它会创建一个请求对象,包含调用的方法名、参数等信息,然后通过网络发送到服务端。服务端接收到请求后,解析出方法名和参数,找到对应的方法进行...

    Java rpc框架简易版,类似dubbo分布式实现 (纯socket实现).zip

    本项目提供了一个简易版的Java RPC框架实现,旨在模仿著名的Dubbo框架,但采用了更基础的Socket通信方式进行分布式服务的搭建。以下是这个项目的核心知识点: 1. **RPC原理**:RPC使得客户端可以像调用本地方法一样...

    jsonrpc c++ 基于boost:asio

    总之,“jsonrpc c++ 基于boost:asio”项目提供了一个C++实现的JSON-RPC服务框架,利用了Boost.ASIO的强大功能来处理网络通信。通过这个库,开发者可以方便地构建自己的JSON-RPC服务器和客户端,实现跨进程甚至跨...

    RPC-DDSF:一种基于RPC的分布式数据共享框架.pdf

    本文介绍了一种名为RPC-DDSF(Remote Procedure Call - Distributed Data Sharing Framework)的分布式数据共享框架,该框架建立在Sun公司的ONC RPC(Open Network Computing Remote Procedure Call)框架基础之上。...

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

    RPC是一种远程调用的通信协议,例如dubbo、thrift等,我们在互联网高并发应用开发时候都会使用到类似的服务。本专题主要通过三个章节实现一个rpc通信的基础功能,来学习RPC服务...- 手写RPC框架第三章《RPC中间件》

    JavaRPC框架

    Java RPC(Remote Procedure Call)框架是一种允许分布式系统中不同节点之间进行远程调用的技术。它使得开发者能够像调用本地方法一样调用远端服务,极大地简化了分布式系统的开发。在给定的“Java RPC框架”中,...

    可参考的自定义实现rpc框架

    在“rpc-master”这个压缩包中,可能包含了整个RPC框架的源代码,包括服务端和客户端的实现、序列化工具类、网络通信模块以及可能的测试用例。深入研究这个源码可以帮助我们理解RPC的工作原理,并且可能为开发自己的...

    实现一个简单的RPC框架

    本篇将详细讲解如何使用socket、反射和序列化等技术来实现一个简单的RPC框架。 首先,让我们了解RPC的基本原理。在RPC模型中,客户端(Client)发起一个函数调用请求,这个请求包含了目标函数的名称和参数。RPC框架...

    rpc-tiger:rpc框架

    二、项目结构rpc-tigerrpc-commonrpc-thriftrpc-nettyrpc-application-springrpc-thrift-springrpc-netty-spring模块说明rpc-common: 封装rpc框架的主要处理逻辑。支持协议扩展,实现协议的不同部分即可。rpc-thrift...

    使用netty自定义rpc通信框架

    本项目是基于Netty 4.0实现的自定义RPC通信框架,旨在为Java开发者提供一种高效、灵活的远程服务调用解决方案。 首先,我们来深入理解Netty的基本概念。Netty的核心是其NIO(非阻塞I/O)模型,它使用了Reactor模式...

    cpp-RPC是一个高性能开源通用的RPC框架

    RPC 是一个高性能、开源、通用的 RPC 框架,面向移动和 HTTP/2 设计。GRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特性。这些特性使得其在移动设备上表现更好,更省电...

    基于 C++ 的 RPC 框架.zip

    基于 C++ 的 RPC 框架.zip基于 C++ 的 RPC 框架.zip基于 C++ 的 RPC 框架.zip基于 C++ 的 RPC 框架.zip基于 C++ 的 RPC 框架.zip基于 C++ 的 RPC 框架.zip基于 C++ 的 RPC 框架.zip基于 C++ 的 RPC 框架.zip基于 C++...

    从0开始的RPC框架 - 简易版

    简易版RPC框架中包含RPC框架运行的核心基本组件: 消费者模块、服务提供者模块、公共模块、Web服务器、本地服务注册器、序列化器、请求处理器和基于代理模式(动态代理)。 简易版框架已经实现了远程过程调用的整体...

    RPC框架的实现原理,及RPC架构组件详解.pdf

    详细讲解RPC

    Hadoop自己的Rpc框架使用Demo

    在分布式计算领域,Hadoop RPC(Remote Procedure Call)框架是一个至关重要的组件,它允许不同的进程之间进行通信,尤其是在大规模数据处理的场景下。Hadoop RPC是Hadoop生态系统中的基础服务,使得不同模块如HDFS...

    RPC框架几行代码就够了.docx

    知识点2:RPC框架的组成部分 RPC框架通常由以下几个组成部分: * 服务暴露:暴露服务的过程,使服务可以被远程调用。 * 服务调用:客户端调用服务的过程。 * 服务处理:服务器端处理服务请求的过程。 知识点3:...

    JAVA实现简单RPC框架

    RPC(Remote Procedure Call)框架是分布式系统中广泛使用的通信机制,允许一个进程调用另一个进程中定义的方法,就像调用本地方法一样。在这个“JAVA实现简单RPC框架”的项目中,我们将探讨如何利用Java的核心特性...

    分布式RPC系统框架-Dubbo(2.7)教程(4.31G)

    分布式RPC系统框架-Dubbo(2.7)教程涵盖了在现代软件开发中至关重要的技术领域,主要涉及分布式系统、远程过程调用(RPC)以及相关的中间件和服务治理。Dubbo是阿里巴巴开源的一款高性能、轻量级的RPC框架,它极大地...

    jsonrpc是一个基于Java的高性能开源RPC框架

    在Java世界中,JSON-RPC作为一个高性能的开源RPC框架,为分布式系统中的服务调用提供了便利。这个框架允许应用程序通过网络在不同的进程之间传递方法调用,仿佛这些方法是在本地对象上调用一样。 JSON-RPC的核心...

    基于netty的手写rpc框架

    2. **服务提供者(Service Provider)**:服务提供者是实现RPC服务的服务器端。它实现了服务接口,并暴露服务供远程调用。在`rpc-server`目录下,可能会包含服务器启动类、服务注册与发布逻辑,以及Netty服务器的...

Global site tag (gtag.js) - Google Analytics