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);
}
} </pre>創建一個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注冊服務,實現負載均衡和故障轉移
</li> -
用Maven管理整個項目
</li> -
增加NORETURN返回類型,實現了客戶端單向調用
</li> -
在設置被調用類時,可以用類對象代替包名加類名字符串,減少拼寫出錯的概率。對于某些客戶端不能加載服務端代碼情況下,字符串方式仍然保留。
</li> </ul> 項目地址:https://github.com/zijan/Tatala-RPC本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!