RPC 中間件,Tatala RPC 0.3.0 更新

jopen 10年前發布 | 16K 次閱讀 Tatala RPC

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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!