RPC 中间件,Tatala RPC 0.3.0 更新
Tatala是一个简单易用的RPC中间件,并且跨语言跨平台。它将调用方法转变成字节数组(包括被调用类名,目标方法名,参数序列和返回值),在socket基础上实现客户端和服务器之间的互相通信。
目前,Tatala支持Java的客户端与服务器端,和C#的客户端。
特性
* 简单易用可以快速开发和建立网络组件
* 跨语言跨平台
* 高性能和分布式
* 传输协议为短小精悍的二进制
* 支持socket长连接
* 客户端与服务器端多线程处理
* 支持异步请求
* 对于大数据支持压缩传输
* 支持服务器端主动推送消息
* 客户端程序可以捕获服务端抛出的异常,使客户端支持事务回滚
* 支持Google Protocol Buffers作为对象序列化进行网络传输
* 支持在服务端注册多个filter,在调用业务代码之前预处理传入的数据,注入业务逻辑,如权限检查等
* 能够用于跨语言的远程方法调用RPC,高性能的缓存服务器,分布式的消息服务,多人在线游戏服务器,等等
快速开始
下载tatala.jar 包含在你项目的classpath中。
简单编程是Tatala第一考虑因素,所以用它建立RPC的方式,让开发者感觉就像调用本地普通方法一样简单。不用考虑网络,线程这些东西。
现在举一个例子,假如我们有个服务器端的服务ExampleManager接口 和 ExampleManagerImpl实现类。
ExampleManager.java
public interface ExampleManager{ public String sayHello(int Id, String name); }
ExampleManagerImpl.java
public class ExampleManagerImpl implements ExampleManager{ public String sayHello(int Id, String name) { return "["+Id+"]"+"Hello "+name+" !"; } }
我们还需要在服务端建立一个socket服务类来部署我们的业务逻辑,在这个例子中socket服务监听端口是10001。 ExampleServer.java
public class ExampleServer { public static void main(String args[]) { int listenPort = 10001; int poolSize = 10; AioSocketServer server = new AioSocketServer(listenPort, poolSize); erver.start(); } }
然后客户端的代码类似这样:
EasyClient.java
public class EasyClient { private static TransferObjectFactory transferObjectFactory; private static ExampleManager manager; public static void main(String[] args) { transferObjectFactory = new TransferObjectFactory("127.0.0.1", 10001, 5000); transferObjectFactory.setImplClass("ExampleManagerImpl"); manager = (ExampleManager)ClientProxyFactory.create(ExampleManager.class, transferObjectFactory); String result = manager.sayHello(18, "JimT"); System.out.println("result: "+result); } }创建一个TransferObjectFactory对象,设置server端的IP地址,端口号和超时时间。设置被调用的实现类的类名,建立proxy,调用方法。当然我们需要把接口类(ExampleManager.class) 加入到客户端的classpath里。这就是建立一个Tatala RPC的所有代码,不需要任何配置文件,是不是很简单?
更多例子请看教程。
Tatala-中文教程
传输协议
在客户端把调用的方法信息设置到transfer object里, Tatala把transfer object转换成字节数组并且发送给服务器。在服务器端把接收到的字节数组再还原成包含调用信息的transfer object。包括被调用类名,目标方法名,参数信息和返回类型等。Tatala 执行器获得调用信息执行目标方法。
支持类型
Tatala支持的参数和返回类型:
bool,byte,short,chat,int,long,float,double,Date,String,
byte[],int[],long[],float[],double[],String[],Serializable,Protobuf, WrapperClass
其它描述
需要JDK1.7,因为使用了Java AIO。
第三方类库包括Protobuf,Log4j。
Tatala RPC 0.3.0 更新,主要改进:
-
用zookeeper注册服务,实现负载均衡和故障转移
-
用Maven管理整个项目
-
增加NORETURN返回类型,实现了客户端单向调用
-
在设置被调用类时,可以用类对象代替包名加类名字符串,减少拼写出错的概率。对于某些客户端不能加载服务端代码情况下,字符串方式仍然保留。