雷火电竞-中国电竞赛事及体育赛事平台

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

C/C++實(shí)現(xiàn)對STORM運(yùn)行信息查看及控制的方法

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點(diǎn)擊:

本文所述程序?qū)嵗饕獙?shí)現(xiàn)在后端應(yīng)用服務(wù)器上實(shí)時獲取STORM集群的運(yùn)行信息和topology相關(guān)的提交和控制。對此,通過對STORM UI和CMD源碼的分析,得出可以通過其thrift接口調(diào)用實(shí)現(xiàn)這些功能。先下載一個thrift庫進(jìn)行編碼和安裝。關(guān)于thrift可以參見這個地方。安裝完成后,從STORM源碼中將storm.thrift拷貝到thrift目錄下。輸入:

hrift -gen cpp storm.thrift

會得到一個gen-cpp目錄,里面就是thrift先關(guān)腳本的C++實(shí)現(xiàn)。我們先看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集群運(yùn)行信息
 ClusterSummary getClusterInfo();
 //獲取TOPOLOGY的運(yùn)行狀態(tài)信息
 TopologyInfo getTopologyInfo(1: string id);
 //獲取TOPOLOGY對象信息
 string getTopologyConf(1: string id);
 StormTopology getTopology(1: string id);
 StormTopology getUserTopology(1: string id);
}

生成C++文件后,我們就可以對其接口進(jìn)行調(diào)用,由于thrift c++框架是使用boost庫實(shí)現(xiàn)的,必須安裝boost庫依賴。實(shí)現(xiàn)的代碼如下:

#define HAVE_NETDB_H //使用網(wǎng)絡(luò)模塊的宏必須打開
#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{
 //創(chuàng)建一個nimbus客戶端對象
 NimbusClient client(tprotocol);
 //打開通道
  ttransport->open();

 ClusterSummary summ;
 std::string conf;
 //對STORM的RPC調(diào)用,直接獲取信息,同步進(jìn)行的。
 client.getNimbusConf(conf);
 client.getClusterInfo(summ);
 //關(guān)閉通道
 ttransport->close(); 
  }catch(TException &tx){ 
 printf("InvalidOperation: %s
", tx.what()); 
  }
}

以上代碼就可以直接獲取nimbus的配置和集群信息,其他接口以此類推。值得注意的是storm.thrift to C++生成的storm_types.h文件里其中operator < 函數(shù)都未實(shí)現(xiàn),所以必須手動進(jìn)行添加實(shí)現(xiàn),否則編譯會有問題。

此外,不僅僅C++可以實(shí)現(xiàn)STORM的控制,PHP和其他的語言也可以實(shí)現(xiàn),只要thrift支持就OK。感興趣的讀者可以自己實(shí)現(xiàn)一下試試看。

上一篇:VC++簡單實(shí)現(xiàn)關(guān)機(jī)、重啟計(jì)算機(jī)實(shí)例代碼

欄    目:C語言

下一篇:C++實(shí)現(xiàn)獲取IP、子網(wǎng)掩碼、網(wǎng)關(guān)、DNS等本機(jī)網(wǎng)絡(luò)參數(shù)的方法

本文標(biāo)題:C/C++實(shí)現(xiàn)對STORM運(yùn)行信息查看及控制的方法

本文地址:http://www.jygsgssxh.com/a1/Cyuyan/3558.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有