RPC 中间件,Tatala RPC 0.3.0 更新

jopen 8年前

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返回类型,实现了客户端单向调用

  • 在设置被调用类时,可以用类对象代替包名加类名字符串,减少拼写出错的概率。对于某些客户端不能加载服务端代码情况下,字符串方式仍然保留。

 项目地址:https://github.com/zijan/Tatala-RPC