分布式 RPC 系統:minirpc

xf3f 9年前發布 | 16K 次閱讀 minirpc WEB服務/RPC/SOA

minirpc 是基于 protobuf 的分布式 RPC 系統。

1. rpc server端提供的service可以是so庫文件方式存在,可以使用libloader工具增加到server上。
2. rpc server會將自己所提供的服務注冊到agent上。
3. agent服務中心采用去中心化的方式運行,通過加入組播實現rpc server的服務列表管理和運行狀態的準實時展現。
4. rpc client可以使用需要調用的server名稱(字符串服務名),向agent中心獲取提供此類服務的rpc server,之后連接rpc server實現數據傳輸和業務處理。

------------------------------------------------------------------

rpc 具體業務實現lib庫編寫方式:

#include "rpc_serverobserver.h"
#include "echo.pb.h"
#include "common/clogwriter.h"
#include <unistd.h>
extern "C" {
    int echo_Init(CRpcSerObserver* aRpcServer);
}
class LibEchoServiceImpl : public echo::EchoService {
    virtual void Echo(::google::protobuf::RpcController* controller,
                      const ::echo::EchoRequest* request,
                      ::echo::EchoResponse* response,
                      ::google::protobuf::Closure* done) {
        response->set_response(request->message()+" lib_rpc_server_echo_hello");
        if (done) {
            done->Run();
        }
    }
    virtual void Dummy(::google::protobuf::RpcController* controller,
                       const ::echo::DummyRequest* request,
                       ::echo::DummyResponse* response,
                       ::google::protobuf::Closure* done) {
        if (done) {
            done->Run();
        }
    }
};
int echo_Init(CRpcSerObserver* aRpcServer) {
    DEBUG(LL_WARN, "echo_Init Begin.");
    RPCREGI(aRpcServer, LibEchoServiceImpl);
    return 0;
}

------------------------------------------------------------------

agent啟動方式:

cd agent

[w@localhost agent]$./miniagent -d

打開agent的運行頁面觀察運行狀態,默認端口是15218.

http://serverip:15218

分布式 RPC 系統:minirpc

rpc server啟動方式:

[w@localhost protobuf]$ ./rpc_server_basic  -p 9987 -s ECHO -d
[w@localhost protobuf]$ ./rpc_server_basic  -p 9988 -s ECHO1 -d      
[w@localhost protobuf]$ ./rpc_server_basic  -h
=====================================
  使用方法: RpcServer [參數選項][-c 配置文件]
  參數選項描述:
  -p 監聽端口 程序啟動時綁定的監聽端口。
  -s 服務名稱 程序啟動時提供的服務名稱。
  -c 配置文件。
  -d 后臺運行  守護進程方式運行。
  -l 日志級別  日志級別見如下描述:
               1. 錯誤日志;
               2. 警告日志;
               3. 通知日志;
               4. 重要的提示性日志;
               5. 打印關鍵變量的值;
               6. 開發人員的調試日志;
               7. 打開所有的日志。
  -v           輸出版本信息。
  -h           輸出運行幫助信息。
  啟動實例:   RpcServer  -p 9090 -c RpcServer.ini -l 2 -d
=====================================

運行動態庫加載工具,向服務BasicServer增加libecho.so提供的服務。

[w@localhost protobuf]$ ./rpc_libloader BasicServer load libecho.so

create success
load resp: libecho.so load success, method list:  echo.EchoService.Echo echo.EchoService.Dummy
load requ: libecho.so
load success
[w@localhost protobuf]$ ./rpc_libloader BasicServer load libecho2.so
create success
load resp: libecho2.so load success, method list:  echo2.EchoService.Echo echo2.EchoService.Dummy

參考:
代碼中你會看到一些類似的開源代碼。本項目中的一些代碼來自如下開源軟件。
haproxy
cxxtools
thrift
protobuf
kamailio
sems
fastrpc
redis
putty等。

謝謝以上開源軟件的開發者們。

請不要拍磚,如果你覺得不可使用,可以選擇thrift等其他rpc軟件。

分布式 RPC 系統:minirpc

分布式 RPC 系統:minirpc

項目主頁:http://www.baiduhome.net/lib/view/home/1429882164760

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