2012-02-27 12 views
1

LMAX Disruptor Queueにタイムアウト機能を適用するにはどうすればよいですか? LMAXかく乱<a href="http://code.google.com/p/disruptor/" rel="nofollow">http://code.google.com/p/disruptor/</a>の開発者/ユーザーへ

私の質問: 誰がかく乱などにタイムアウト機能を適用する方法へのアプローチを提案することができますEventHandlerを使用していますか?ここで

が仕事の私のラインに来た1つのシナリオです: - ネットワーク上のサーバーに送信されたメッセージ

  • 受信トレイ -

    1. 送信トレイACKメッセージは、サーバー
    2. ACKハンドラから受け取りました - マークがACKさ
    3. タイムアウトハンドラとしてメッセージを送信トレイ - マークは、(多くの必要な、しかし、それはどこかく乱デザインに合うことができますか?)NACKさとしてメッセージを送信トレイ

    同じ意見を共有している人はいますか? 誰もがなぜ不要かを指摘することができます。 今後の議論が簡単になることを願っています。

    ありがとうございます。

  • 答えて

    0

    タイムアウトハンドラを明確にするには、メッセージを配信できなかった一定時間が経過した後に「起動」しますか?

    ディザスターで動作する方法は、インバウンドのリングバッファとアウトバウンドメッセージのリングバッファです。電子メールが届き、適切なイベントを使用してインバウンドリングバッファに配置します。メッセージを処理する(つまり、デコード、アナジー、ログ、ストア)、それをアウトバウンドリングバッファに入れて別のシステムに送信する...別のハンドラがメッセージを取り出してデータベースに格納するか、smtpを使用して別のサーバに送信する...エラー/タイムアウトなどが発生した場合は、インバウンドリングバッファにエラー(NACK)を通知してこのメ​​ッセージを処理するイベントを作成します。それは理にかなっていますか?!?

    +0

    はい、タイムアウトのEventHandlerは、オブジェクトがリングバッファーに長すぎる場合に呼び出されます。 問題は、タイムアウトをサポートするためにEventHandlerを実装してRingBuffer/Distruptorに登録する方法がわかりません。 私が考えることができる唯一の解決策は、自分のEventProcessorをカスタマイズすることです。 –

    +0

    すっごく返信してくれて申し訳ありません。設定した回数、つまり電子メールを送信するための再試行の回数、または時間tが経過するまで、再発行する必要があります。スレッドは常にそれに戻ってきます。 –

    関連する問題