分布式 RPC 系統:minirpc
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 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軟件。