内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

storm中spout和boltjavaapi有什么用

小編給大家分享一下storm中spout和bolt java api有什么用,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

成都創(chuàng)新互聯(lián)公司專注于中大型企業(yè)的成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)和網(wǎng)站改版、網(wǎng)站營銷服務(wù),追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開發(fā)的融合,累計(jì)客戶千余家,服務(wù)滿意度達(dá)97%。幫助廣大客戶順利對(duì)接上互聯(lián)網(wǎng)浪潮,準(zhǔn)確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運(yùn)用,我們將一直專注成都品牌網(wǎng)站建設(shè)和互聯(lián)網(wǎng)程序開發(fā),在前進(jìn)的路上,與客戶一起成長!

Component

Storm中,Spout和Bolt都是其Component。所以,Storm定義了一個(gè)名叫IComponent的總接口

storm中spout和bolt java api有什么用

圖譜如下:

storm中spout和bolt java api有什么用

綠色部分是我們最常用、比較簡(jiǎn)單的部分。紅色部分是與事務(wù)相關(guān)的,在以后的文章會(huì)具體講解。

BaseComponent 是Storm提供的“偷懶”的類。為什么這么說呢,它及其子類,都或多或少實(shí)現(xiàn)了其接口定義的部分方法。這樣我們?cè)谟玫臅r(shí)候,可以直接繼承該類,而不是自己每次都寫所有的方法。但值得一提的是,BaseXXX這種定義的類,它所實(shí)現(xiàn)的方法,都是空的,直接返回null。

Spout

在前面基本例子中,我們實(shí)現(xiàn)了一個(gè)RandomSpout,來看看其類圖

storm中spout和bolt java api有什么用

  • Spout的最頂層抽象是ISpout接口。

storm中spout和bolt java api有什么用

open方法是初始化動(dòng)作。允許你在該spout初始化時(shí)做一些動(dòng)作,傳入了上下文,方便取上下文的一些數(shù)據(jù)。

close方法在該spout關(guān)閉前執(zhí)行,但是并不能得到保證其一定被執(zhí)行。spout是作為task運(yùn)行在worker內(nèi),在cluster模式下,supervisor會(huì)直接kill -9 woker的進(jìn)程,這樣它就無法執(zhí)行了。而在本地模式下,只要不是kill -9, 如果是發(fā)送停止命令,是可以保證close的執(zhí)行的。

activate和deactivate :一個(gè)spout可以被暫時(shí)激活和關(guān)閉,這兩個(gè)方法分別在對(duì)應(yīng)的時(shí)刻被調(diào)用。

nextTuple 用來發(fā)射數(shù)據(jù)。

ack(Object)

傳入的Object其實(shí)是一個(gè)id,唯一表示一個(gè)tuple。該方法是這個(gè)id所對(duì)應(yīng)的tuple被成功處理后執(zhí)行。

fail(Object)

同ack,只不過是tuple處理失敗時(shí)執(zhí)行。

我們的RandomSpout 由于繼承了BaseRichSpout,所以不用實(shí)現(xiàn)close、activate、deactivate、ack、fail和getComponentConfiguration方法,只關(guān)心最基本核心的部分。

結(jié)論:
通常情況下(Shell和事務(wù)型的除外),實(shí)現(xiàn)一個(gè)Spout,可以直接實(shí)現(xiàn)接口IRichSpout,如果不想寫多余的代碼,可以直接繼承BaseRichSpout。

Bolt

 ExclaimBasicBolt的類圖: 

storm中spout和bolt java api有什么用

這里可以看到一個(gè)奇怪的問題:
為什么IBasicBolt并沒有繼承IBolt?
我們帶著問題往下看。

IBolt定義了三個(gè)方法:

storm中spout和bolt java api有什么用

IBolt繼承了java.io.Serializable,我們?cè)趎imbus上提交了topology以后,創(chuàng)建出來的bolt會(huì)序列化后發(fā)送到具體執(zhí)行的worker上去。worker在執(zhí)行該Bolt時(shí),會(huì)先調(diào)用prepare方法傳入當(dāng)前執(zhí)行的上下文
execute接受一個(gè)tuple進(jìn)行處理,并用prepare方法傳入的OutputCollector的ack方法(表示成功)或fail(表示失?。﹣矸答佁幚斫Y(jié)果
cleanup 同ISpout的close方法,在關(guān)閉前調(diào)用。同樣不保證其一定執(zhí)行。
紅色部分是Bolt實(shí)現(xiàn)時(shí)一定要注意的地方。而Storm提供了IBasicBolt接口,其目的就是實(shí)現(xiàn)該接口的Bolt不用在代碼中提供反饋結(jié)果了,Storm內(nèi)部會(huì)自動(dòng)反饋成功。
如果你確實(shí)要反饋失敗,可以拋出FailedException。

我們來再寫一個(gè)Bolt繼承BaseRichBolt替代ExclaimBasicBolt。代碼如下:

public class ExclaimRichBolt extends BaseRichBolt {
 
     private OutputCollector collector;
     
     @Override
     public void prepare(Map stormConf, TopologyContext context,
             OutputCollector collector) {
         this .collector = collector;
     }
 
     @Override
     public void execute(Tuple tuple) {
         this .collector.emit(tuple, new Values(tuple.getString( 0 )+ "!" ));
         this .collector.ack(tuple);
     }
 
     @Override
     public void declareOutputFields(OutputFieldsDeclarer declarer) {
         declarer.declare( new Fields( "after_excl" ));
     }
 
}

修改topology

//builder.setBolt("exclaim", new ExclaimBasicBolt(), 2).shuffleGrouping("spout");
builder.setBolt( "exclaim" , new ExclaimRichBolt(), 2 ).shuffleGrouping( "spout" );

運(yùn)行下,結(jié)果一致。

結(jié)論:

通常情況下,實(shí)現(xiàn)一個(gè)Bolt,可以實(shí)現(xiàn)IRichBolt接口或繼承BaseRichBolt,如果不想自己處理結(jié)果反饋,可以實(shí)現(xiàn)IBasicBolt接口或繼承BaseBasicBolt,它實(shí)際上相當(dāng)于自動(dòng)做掉了prepare方法和collector.emit.ack(inputTuple);

看完了這篇文章,相信你對(duì)“storm中spout和bolt java api有什么用”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

文章名稱:storm中spout和boltjavaapi有什么用
分享URL:http://www.rwnh.cn/article30/gjhpso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)動(dòng)態(tài)網(wǎng)站、定制網(wǎng)站、標(biāo)簽優(yōu)化、、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作
兴安盟| 酒泉市| 诸暨市| 镇雄县| 繁峙县| 岳池县| 临夏县| 宜阳县| 德令哈市| 罗平县| 辽中县| 枣强县| 年辖:市辖区| 海宁市| 苏尼特左旗| 陕西省| 缙云县| 莱西市| 隆回县| 湘西| 万山特区| 乌拉特后旗| 遵义县| 郁南县| 邹平县| 敦煌市| 白沙| 满城县| 肥乡县| 上杭县| 尼勒克县| 苏尼特左旗| 吉林市| 天台县| 新宾| 长沙市| 富阳市| 江安县| 天气| 集安市| 天等县|