本文簡單的模擬了實際生成環境場景中使用的c/s模型,使用thrift作為框架來進行開發,服務端實現了兩個介面,使用threadpoolserver模型提供服務,由於只是學習thrift相關的使用,本文的**不是很嚴謹,**設計基本沒有,請閱讀本文之前最好有基本的thrift相關的知識。如
* thrift檔案中的基本資料型別
* thrift檔案中的簡單的結構體定義
* 如何用thrift檔案生成**
在生成環境中,每次呼叫rpc都必須要有返回值,以標識rpc在業務層面的成功與否。
本次實驗定義了乙個通用返回結構體,由於thrift檔案支援包含語法,所以將該結構體
定義在comm.thrift檔案中,用於被其他thrift檔案包含
comm.thrift:
struct returnmessage
業務介面和介面定義test.thrift檔案:
include "comm.thrift"
namespace cpp xbshop.manage.login
struct reqloginservice
//req+服務名定義的結構體代表該服務的請求引數,res+服務名定義的結構體代表該服務的返回引數
struct resloginservice
struct reqqryorderservice
struct resqryorderservice
//定義了兩個服務,乙個是loginservice登入服務,乙個是qyrorderservice查詢訂單服務
service loginservice
service qryorderservice
使用命令thrift -r –gen cpp test.thrift , -r引數的含義是編譯test.thrift檔案的同時還會編譯其包含檔案comm.thrift
#include "loginservicehandle.h"
#include "qryorderservice.h"
#include
#include
#include
#include
#include "thrift/processor/tmultiplexedprocessor.h"
#include "thrift/server/t******server.h"
#include "concurrency/posixthreadfactory.h"
#include "concurrency/threadmanager.h"
using
namespace ::apache::thrift;
using
namespace ::apache::thrift::protocol;
using
namespace ::apache::thrift::transport;
using
namespace ::apache::thrift::server;
using
namespace ::apache::thrift::concurrency;
using boost::shared_ptr;
using
namespace ::xbshop::manage::login;
int main(int argc, char **argv)
如果服務端需要定義多個服務,需要使用tmultiplexedprocessor類註冊多個processor。
如果要使用tthreadpoolserver服務模型,必須自己定義乙個threadmanager,並呼叫start函式,不然客戶端呼叫rpc時會拋異常.服務端**中的loginservicehandle.h和loginservicehandle.cpp是自己新建的,在生產環境中乙個service的**檔案肯定是單獨存放的,而自動生成的**檔案中handle與main函式是放在一起的
loginservicehandle.h
#ifndef _login_service_handle_h
#define _login_service_handle_h
#include "loginservice.h"
using namespace ::xbshop::manage::login;
class loginservicehandler : virtual
public loginserviceif
;#endif
loginservicehandle.cpp
#include "loginservicehandle.h"
loginservicehandler::loginservicehandler()
void loginservicehandler::login(::returnmessage& _return, const reqloginservice& reqparams)
qryorderservice的實現
qryorderservicehandler::qryorderservicehandler()
void qryorderservicehandler::qryorder(resqryorderservice& _return, const reqqryorderservice& reqparams)
else
}
#include
#include "loginservicehandle.h"
#include "qryorderservice.h"
#include "test_types.h"
#include "transport/tsocket.h"
#include "transport/tbuffertransports.h"
#include "protocol/tbinaryprotocol.h"
#include "protocol/tmultiplexedprotocol.h"
using
namespace apache::thrift;
using
namespace apache::thrift::protocol;
using
namespace apache::thrift::transport;
using boost::shared_ptr;
using
namespace ::xbshop::manage::login;
int main()
相應的客戶端要使用多個service,需要用到tmultiplexedprotocol類,用來初始化相應service的客戶端。 開發環境 測試環境 預生產環境 生產環境區別
環境分以下幾種 1.開發和配置環境 所有的開發和配置在這個環境裡進行。一般情況下,只有這個環境可以改配置和進行開發,並且一般不在這個環境下建立資料。開發環境就是每個開發人員電腦上的開發環境,只有開發人員可以配置和開發,寫資料測試放在測試環境 2.測試環境 3.預生產環境 不是必須的 從生產環境不定期...
開發環境 測試環境 預生產環境 生產環境區別
環境分以下幾種 1.開發和配置環境 所有的開發和配置在這個環境裡進行。一般情況下,只有這個環境可以改配置和進行開發,並且一般不在這個環境下建立資料。開發環境就是每個開發人員電腦上的開發環境,只有開發人員可以配置和開發,寫資料測試放在測試環境 2.測試環境 3.預生產環境 不是必須的 從生產環境不定期...
hazelcast生產環境使用筆記
hazelcast雖然有很多優秀的特性,但是如果沒有掌握好原理和配置,難免會遇到各種問題。問題一.集群節點無反應。原因是hazelcast集群在預設配置下,執行緒耗盡,整個集群進入假死狀態。預設配置,併發15執行緒,集群就死掉。解決方式修改預設配置項,擴大執行緒池。問題二.集群反應超慢。但是未宕機。...