重要模块
传参,序列化,反序列化机制
参数格式
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框架 说明:https://blog.csdn.net/lan861698789/article/details/103837228
Java rpc框架简易版,类似dubbo分布式实现 (纯socket实现).zip
RPC是一种远程调用的通信协议,例如dubbo、thrift等,我们在互联网高并发应用开发时候都会使用到类似的服务。本专题主要通过三个章节实现一个rpc通信的基础功能,来学习RPC服务...- 手写RPC框架第三章《RPC中间件》
jsonrpc是一个基于Java的高性能开源RPC框架
二、项目结构rpc-tigerrpc-commonrpc-thriftrpc-nettyrpc-application-springrpc-thrift-springrpc-netty-spring模块说明rpc-common: 封装rpc框架的主要处理逻辑。支持协议扩展,实现协议的不同部分即可。rpc-thrift...
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系统框架-Dubbo(2.7)教程(4.31G) 〖课程介绍〗: 分布式RPC系统框架-Dubbo(2.7)教程 〖课程目录〗: 〖视频截图〗:
详细讲解RPC
在bas基础上写的json rpc库,自定义的类继承CRpcBase,在构造函数里AddMethod添加远程调用方法即可,有示例程序
java原生实现的RPC框架,使用技术:JDK动态代理、Socket通信(BIO方式)、反射、注解、Java序列化
基于netty开发的java rpc框架demo,可以在此基本上继续完善
基于dubbo实现的rpc框架RPC 框架指的是:可以让客户端直接调用服务端方法就像调用本地方法一样简单的框架,比如我前面介绍的 Dubbo、Motan、gRPC 这些.zip
使用socket/反射/序列化等技术实现了一个基本的远程调用框架,可参考博客http://blog.csdn.net/u013177446/article/details/66473066
csharp/c#/.net使用 TCP + JsonUtility + Task 的简易 RPC 网络框架 Simple RPC network framework using TCP + JsonUtility + Task.zip
RPC 框架 :love_letter: 写在前面 本项目基于 Spring + Netty + Zookeeper + Protostuff 从零开始设计实现一个轻量级的分布式 RPC 框架,内含详细设计思路以及开发教程,通过造轮子的方式来学习,深入理解 RPC 框架...
实现一个IoC/DI容器参考网址:https://blog.csdn.net/weixin_43042683/article/details/106456415 实现一个RPC框架参考网址: https://blog.csdn.net/weixin_43042683/article/details/106459282
Hadoop自己的Rpc框架使用Demo。可以在自己的项目中用Hadoop的Rpc框架了。
高性能RPC框架 nfs-rpc.7z
Internal rpc error (error code:2). Machine: 192.168.0.22. Hint: Check that RPC on this machine is up and running. Check that rstat daemon on this machine is up and running (use rpcinfo utility for ...