1

Disruptor フレームワークを使用するシステムがあり、EvenetHandler を実装する 5 つのステージが登録されています。

ステージはシーケンスで機能するため、リクエストは最初のステージが完了したときにのみ 2 番目のステージに移動できます。この移動は Disruptor によって内部的に維持されます。

第 3 段階に問題があります。これは、異なる HTTP 呼び出しを行い、応答を要求オブジェクトに格納するため、多くの時間がかかるボトルネックです。

したがって、第 3 段階でしばらく時間が経過した後、要求を (応答が何であれ) 第 4 段階と第 5 段階に進めたいと考えています。

特定のステージ (この場合は第 3 ステージ) をタイムアウトして、リクエストを次のステージに強制的に移動するにはどうすればよいですか?

または、

定義されたタイムアウトの後にトリガーされるイベントを登録する方法はありますか?これはシステムレベルのタイムアウトのようなものでしょうか?

4

1 に答える 1

1

私たちが試した解決策は

  1. ステージ (またはすべてのステージ) によって処理されるシーケンスを監視するハング検出スレッドを用意します。イベント プロセッサ自体にタイミング情報があります。
  2. タイムアウトになると、イベント プロセッサ スレッドに割り込みます。これにより、イベント プロセッサは実行中のスピンから終了します。ここで、ステージを処理しているスレッド (またはスレッドの 1 つ) を失いました。
  3. イベント プロセッサ スレッドを置き換えます。

ソリューションには、割り込みを認識する独自のイベント プロセッサを作成し、イベント ステージをディスラプタに動的に追加するための準備が必要です。

于 2013-12-16T06:13:18.803 に答える