いくつかの基本的な特性ストームボルトインターフェース

いくつかの基本的な特性ストームボルトインターフェース

メインIBolt、IRichBolt、IBasicBolt及びIBatchBoltで定義されたストームボルトインタフェースは、クラス図を見

14534869-bf88b6f0bdf61bf9.png
図ボルトクラス

.IRichBolt

嵐は、最も一般的にインタフェーストポロジ・コンポーネントを定義するために使用されます。それは非常に柔軟であり、ユーザは、制御ロジックの多様を達成することができ、そのアンカーによってACK、失敗との動作タイミングを制御することができます。

ボルトは、それが開始され、ニュースの入力時に、嵐でユニットを実行するための基礎となる処理のためのexecuteメソッドを呼び出します。そしてISpout同様に、IBoltオブジェクトを送信するバイト配列、ノード逆シリアル化プロセスにより得られたオブジェクトの特定の実装にシリアライズし、コールバックメソッドを呼び出す準備します。ユーザは、各特定のオブジェクトが正しく初期化され得ることを確実にするために実装され、複雑なオブジェクトの初期化コールバックメソッドを準備しなければなりません。オブジェクトが破棄されるとき、それはクリーンアップコールバックメソッドを呼び出しますが、嵐はメソッドが実行されなければならないことを保証するものではありません。

典型的には、この方法は、新しいメッセージがダウンストリームノードに送信する必要が生成することができる、入力メッセージが処理され実行達成し、最終的に、メッセージは、ACK操作を入力しました。メッセージ処理に失敗した場合、入力されたメッセージは、基礎ACKメッセージシステムで操作を失敗必要が正常に動作することができます。

二.IBasicBolt

提供トポロジー単純なインタフェース定義ロジックコンポーネント嵐、比較的単純なボルトを達成するために独自に基づいてユーザ。

利点は、あなたがアクチュエータBasicBoltExecutorによって達成されている問題のAckメッセージ、失敗とアンカーの操作、に対処する準備IBasicBoltストームのフレームワーク自体に基づいています。BasicBoltExecutorはIRichBoltインタフェースも呼び出しの前方IBasciBoltメンバ変数を含む実現しました。これは、装飾的なパターンの実装をベースにしています。

そのコードを以下に示します

public class BasicBoltExecutor implements IRichBolt {
    public static Logger LOG = LoggerFactory.getLogger(BasicBoltExecutor.class);
    private IBasicBolt _bolt;
    private transient BasicOutputCollector _collector;

    public BasicBoltExecutor(IBasicBolt bolt) {
        //内部封装了真实的bolt
        this._bolt = bolt;
    }

    public void declareOutputFields(OutputFieldsDeclarer declarer) {
        this._bolt.declareOutputFields(declarer);
    }

    public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
        this._bolt.prepare(stormConf, context);
        this._collector = new BasicOutputCollector(collector);
    }

    public void execute(Tuple input) {
        //该execute方法都是通过调用真实的bolt来完成的
        this._collector.setContext(input);

        try {
            this._bolt.execute(input, this._collector);
            this._collector.getOutputter().ack(input);
        } catch (FailedException var3) {
            if (var3 instanceof ReportedFailedException) {
                this._collector.reportError(var3);
            }

            this._collector.getOutputter().fail(input);
        }

    }

    public void cleanup() {
        this._bolt.cleanup();
    }

    public Map<String, Object> getComponentConfiguration() {
        return this._bolt.getComponentConfiguration();
    }
}

しかしIBasicBoltを使用して、制限されたメッセージに基づいて導出されるすべてのメッセージは、そうでなければ組み込みACKメカニズムは、ボルトの正常な動作を保証しないであろう、一度実行送出されなければならない受信。このタイプは、ボルト接続または集計操作を行うしたがって、ユーザは避けるべきです。

三.IBatchBolt

嵐は、バルクデータインターフェースを提供治療するために使用されます。現在のところ、それだけで嵐の基盤が取引トポロジを実装しているトランザクションのトポロジに使用されます。システムはバッチに属する第1のメッセージを受信し、すべてのメッセージが処理された後、その後破壊されたときにIBatchBoltが作成されます。常に嵐直列化復元オブジェクトの仕方によってもたらさIBatchBoltオブジェクトを作成する負担を補償するために。

finishBatchメソッドを持つ:処理されたこれらのメッセージが呼び出されるときに、このメソッドはのみです。ICoranitterインタフェースを実現しながら、バッチの前に、すべてのバッチが処理された後BatchBoltは、finishBatchメソッドは正常に呼び出された場合場合。これは、強力な順序関係を保証するだけでなく、嵐トポロジ取引基盤を実装しました。

ます。https://www.jianshu.com/p/4b6fd931ca83で再現

おすすめ

転載: blog.csdn.net/weixin_34174322/article/details/91246135