重要模块
传参,序列化,反序列化机制
参数格式
AgentRequest:
AgentResponse
方法参数在添加时,顺序要和远程方法一致,并且方法参数和执行结果在client和server端的classpath上都存在,并且需要保持一致。这样序列化和反序列化才能正常进行,如果采用定制系统,可由业务开发人员自己实现。
序列化,反序列化机制:
可以定制,默认采用XStream
负载均衡
JMS方式可以让同一个agent group的所有agent server都监听在同一个queue上,这是一个简单的负载均衡结构。 是由JMS提供商实现的。
其他的方式采用简单的client side实现,结构如图
对client端每个agentGroup维护一个循环链表存放所有active的agent,用另外一个链表维护所有inactive的agents ,如果在调用的过程中发现某个agent不可达,发生connection error,比如出现SocketException,就判定这个agent不可达,并从active agent链表中移到inactive agent的链表中。在后台还会schedule一个线程周期性地检测inactive链表中的agent是否已经可达,agent server可以提供一个isHealthy方法。如果可达的话,就从inactive链表中移到active链表中。
同步, 异步远程调用
如果业务逻辑对远程调用的执行结果依赖性很强,或者业务逻辑上的调用需要同步,可以使用同步远程调用。异步远程调用可以提高系统的吞吐率。
HTTP
同步:HTTP是一种同步通信协议,client端可以用HTTPComponent,现在HTTPClient也属于它的一个子项目。
异步:由于非阻塞IO的出现,出现了很多framework对socket异步通信的支持。Apache HTTP Component就是其中一个,今年发布了GA release版本。用它可以方便地实现HTTP的异步通信。大体原理如下图所示:
JMS:
同步:可以用jms的TemporaryQueue作为同步调用的信道。JmsExecutor创建一个TemporaryQueue:tempQueue,然后再发送agentRequest到业务逻辑指定的Queue:busiessQueue中,接着JmsExecutor监听在这个TemporaryQueue上,agent server监听在这个busiessQueue上,收到消息后执行agent server端业务逻辑,并将agentResponse发送到tempQueue中,JmsExecutor得到执行结果,然后删除tempQueue。
异步:JMS本身就是一种异步通信方式
RMI:
同步:RMI是一种同步调用方式
异步:需要自己实现Reactor/Connector模式 实现方式类似HTTP的异步结构图。
业务逻辑调用者
业务逻辑调用可以用java反射实现。
Agent上下文
用ThreadLocal实现
异常处理
如果在远程业务逻辑调用的过程中异常,并抛出到Agent server中,传回到客户端,由客户端处理。
源代码:
过两天整理好了补上。
分享到:
相关推荐
首先,理解RPC框架的基本流程至关重要。当客户端发起一个RPC调用时,它会创建一个请求对象,包含调用的方法名、参数等信息,然后通过网络发送到服务端。服务端接收到请求后,解析出方法名和参数,找到对应的方法进行...
本项目提供了一个简易版的Java RPC框架实现,旨在模仿著名的Dubbo框架,但采用了更基础的Socket通信方式进行分布式服务的搭建。以下是这个项目的核心知识点: 1. **RPC原理**:RPC使得客户端可以像调用本地方法一样...
总之,“jsonrpc c++ 基于boost:asio”项目提供了一个C++实现的JSON-RPC服务框架,利用了Boost.ASIO的强大功能来处理网络通信。通过这个库,开发者可以方便地构建自己的JSON-RPC服务器和客户端,实现跨进程甚至跨...
本文介绍了一种名为RPC-DDSF(Remote Procedure Call - Distributed Data Sharing Framework)的分布式数据共享框架,该框架建立在Sun公司的ONC RPC(Open Network Computing Remote Procedure Call)框架基础之上。...
RPC是一种远程调用的通信协议,例如dubbo、thrift等,我们在互联网高并发应用开发时候都会使用到类似的服务。本专题主要通过三个章节实现一个rpc通信的基础功能,来学习RPC服务...- 手写RPC框架第三章《RPC中间件》
Java RPC(Remote Procedure Call)框架是一种允许分布式系统中不同节点之间进行远程调用的技术。它使得开发者能够像调用本地方法一样调用远端服务,极大地简化了分布式系统的开发。在给定的“Java RPC框架”中,...
在“rpc-master”这个压缩包中,可能包含了整个RPC框架的源代码,包括服务端和客户端的实现、序列化工具类、网络通信模块以及可能的测试用例。深入研究这个源码可以帮助我们理解RPC的工作原理,并且可能为开发自己的...
本篇将详细讲解如何使用socket、反射和序列化等技术来实现一个简单的RPC框架。 首先,让我们了解RPC的基本原理。在RPC模型中,客户端(Client)发起一个函数调用请求,这个请求包含了目标函数的名称和参数。RPC框架...
二、项目结构rpc-tigerrpc-commonrpc-thriftrpc-nettyrpc-application-springrpc-thrift-springrpc-netty-spring模块说明rpc-common: 封装rpc框架的主要处理逻辑。支持协议扩展,实现协议的不同部分即可。rpc-thrift...
本项目是基于Netty 4.0实现的自定义RPC通信框架,旨在为Java开发者提供一种高效、灵活的远程服务调用解决方案。 首先,我们来深入理解Netty的基本概念。Netty的核心是其NIO(非阻塞I/O)模型,它使用了Reactor模式...
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框架中包含RPC框架运行的核心基本组件: 消费者模块、服务提供者模块、公共模块、Web服务器、本地服务注册器、序列化器、请求处理器和基于代理模式(动态代理)。 简易版框架已经实现了远程过程调用的整体...
详细讲解RPC
在分布式计算领域,Hadoop RPC(Remote Procedure Call)框架是一个至关重要的组件,它允许不同的进程之间进行通信,尤其是在大规模数据处理的场景下。Hadoop RPC是Hadoop生态系统中的基础服务,使得不同模块如HDFS...
知识点2:RPC框架的组成部分 RPC框架通常由以下几个组成部分: * 服务暴露:暴露服务的过程,使服务可以被远程调用。 * 服务调用:客户端调用服务的过程。 * 服务处理:服务器端处理服务请求的过程。 知识点3:...
RPC(Remote Procedure Call)框架是分布式系统中广泛使用的通信机制,允许一个进程调用另一个进程中定义的方法,就像调用本地方法一样。在这个“JAVA实现简单RPC框架”的项目中,我们将探讨如何利用Java的核心特性...
分布式RPC系统框架-Dubbo(2.7)教程涵盖了在现代软件开发中至关重要的技术领域,主要涉及分布式系统、远程过程调用(RPC)以及相关的中间件和服务治理。Dubbo是阿里巴巴开源的一款高性能、轻量级的RPC框架,它极大地...
在Java世界中,JSON-RPC作为一个高性能的开源RPC框架,为分布式系统中的服务调用提供了便利。这个框架允许应用程序通过网络在不同的进程之间传递方法调用,仿佛这些方法是在本地对象上调用一样。 JSON-RPC的核心...
2. **服务提供者(Service Provider)**:服务提供者是实现RPC服务的服务器端。它实现了服务接口,并暴露服务供远程调用。在`rpc-server`目录下,可能会包含服务器启动类、服务注册与发布逻辑,以及Netty服务器的...