2016-09-13 9 views
1

次のように私はトポロジを持っている:BaseRichSpout - Apache Stormのfail()メソッドの失敗の原因を見つける方法?

スパウトは Bolt1はタプルを受け取る場所 Bolt2及びその他のストリーム "bolt1stream"が加入されたストリーム "mystream"があり
Spout --> Bolt 1 --> Bolt2 --> Bolt3 

。タプルの失敗(私の場合はBolt2)の場合

は、私がこのためBolt1からではなく、再びBolt2から

を、それを再生したいと思い、私はBolt2でタプルを失敗します。この失敗メッセージがspoutに達すると、失敗したポイントに基づいてmystream/bolt1streamに送信します。したがって、障害ポイントからの処理が開始されます。

ただし、BaseRichSpoutのfail()には、TupleではなくObjectパラメータがあります。私はタプルと同じように、sourceComponentをどのように知っていますか?または、それが失敗した場所からタプルを再生する最善の方法は何ですか。

ありがとうございます。

答えて

0

ストリームごとに、ストリームを識別するために別のクラスを使用します。別の方法としては、同じクラスを使用し、ストリームを識別するクラス内に整数または列挙型を持たせる方法があります。

@Override 
public void fail(Object msgId) { 
    if (msgId instanceof MyTupleClass) { 
    // Default stream 
    MyTupleClass oneTuple = (MyTupleClass) msgId; 
    //---tuple replay logic. Re-emitting the failed tuples  
    ReEmitTheDefaultStreamTuple(oneTuple); 
} 
else { 
    //it's the other stream 
    //For this stream you could perhaps use MySecondTupleClass 
} 
+0

MyTupleClassは、ボルトに送信するデータを保存するためのクラスです。しかし、それを実装してください: 'class MyTupleClass {public String someInfo;}'。さらに、問題に関する詳細なディスカッションをしたい場合は、嵐メーリングリストhttp://mail-archives.apache.org/mod_mbox/storm-user/があります。この私の答えが役に立つなら、あなたはそれをアップフォワードし、それを受け入れられた答えとしてマークすることができます。 – Nav

+0

私も(MyTupleClass)を確認できますか? 'org.quadrisk.utils.EventTupleをbacktype.storm.tuple.Tupleに変換できないというエラーが表示されます。 –

関連する問題