C/C++完成對STORM運轉信息檢查及掌握的辦法。本站提示廣大學習愛好者:(C/C++完成對STORM運轉信息檢查及掌握的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C/C++完成對STORM運轉信息檢查及掌握的辦法正文
本文所述法式實例重要完成在後端運用辦事器上及時獲得STORM集群的運轉信息和topology相干的提交和掌握。對此,經由過程對STORM UI和CMD源碼的剖析,得出可以經由過程其thrift接口挪用完成這些功效。先下載一個thrift庫停止編碼和裝置。關於thrift可以拜見這個處所。裝置完成後,從STORM源碼中將storm.thrift拷貝到thrift目次下。輸出:
hrift -gen cpp storm.thrift
會獲得一個gen-cpp目次,外面就是thrift先關劇本的C++完成。我們先看storm.thrift文件接口:
service Nimbus
{
//TOPOLOGY上傳接口
void submitTopology(1: string name, 2: string uploadedJarLocation, 3: string jsonConf, 4: StormTopology topology);
void submitTopologyWithOpts(1: string name, 2: string uploadedJarLocation, 3: string jsonConf, 4: StormTopology topology, 5: SubmitOptions options);
void killTopology(1: string name);
void killTopologyWithOpts(1: string name, 2: KillOptions options) throws (1: NotAliveException e);
void activate(1: string name) ;
void deactivate(1: string name);
void rebalance(1: string name, 2: RebalanceOptions options);
//TOPOLOGY JAR包上傳接口
string beginFileUpload();
void uploadChunk(1: string location, 2: binary chunk);
void finishFileUpload(1: string location);
string beginFileDownload(1: string file);
binary downloadChunk(1: string id);
//獲得NIMBUS的設置裝備擺設信息
string getNimbusConf();
//獲得STORM集群運轉信息
ClusterSummary getClusterInfo();
//獲得TOPOLOGY的運轉狀況信息
TopologyInfo getTopologyInfo(1: string id);
//獲得TOPOLOGY對象信息
string getTopologyConf(1: string id);
StormTopology getTopology(1: string id);
StormTopology getUserTopology(1: string id);
}
生成C++文件後,我們便可以對其接口停止挪用,因為thrift c++框架是應用boost庫完成的,必需裝置boost庫依附。完成的代碼以下:
#define HAVE_NETDB_H //應用收集模塊的宏必需翻開
#include "Nimbus.h"
#include "storm_types.h"
#include <string>
#include <iostream>
#include <set>
#include <transport/TSocket.h>
#include <transport/TBufferTransports.h>
#include <protocol/TBinaryProtocol.h>
int test_storm_thrift()
{
boost::shared_ptr<TSocket> tsocket(new TSocket("storm-nimbus-server", 6627));
boost::shared_ptr<TTransport> ttransport(new TFramedTransport(tsocket, 1024 * 512)); //此處必需應用TFramedTransport
boost::shared_ptr<TProtocol> tprotocol(new TBinaryProtocol(ttransport));
try{
//創立一個nimbus客戶端對象
NimbusClient client(tprotocol);
//翻開通道
ttransport->open();
ClusterSummary summ;
std::string conf;
//對STORM的RPC挪用,直接獲得信息,同步停止的。
client.getNimbusConf(conf);
client.getClusterInfo(summ);
//封閉通道
ttransport->close();
}catch(TException &tx){
printf("InvalidOperation: %s
", tx.what());
}
}
以上代碼便可以直接獲得nimbus的設置裝備擺設和集群信息,其他接口以此類推。值得留意的是storm.thrift to C++生成的storm_types.h文件裡個中operator < 函數都未完成,所以必需手動停止添加完成,不然編譯會有成績。
另外,不只僅C++可以完成STORM的掌握,PHP和其他的說話也能夠完成,只需thrift支撐就OK。感興致的讀者可以本身完成一下嘗嘗看。