模擬生產環境使用thrift c 版

2021-07-28 13:15:13 字數 3439 閱讀 4771

本文簡單的模擬了實際生成環境場景中使用的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執行緒,集群就死掉。解決方式修改預設配置項,擴大執行緒池。問題二.集群反應超慢。但是未宕機。...