2

リング バッファーとイベント ハンドラーがあります。これは、メッセージング サーバーの受信バッファーとして使用されます。

私の偶数ハンドラー内では、いくつかの AMQP サービス呼び出しが行われ、その呼び出しがタイムアウトなしで待機することがある (AMQP サービスを呼び出すアンダーライン プロトコル ライブラリのバグ)。そして 2000tps では、これにより 4096 サイズのリング バッファが一瞬で FULL になりました。前述の事実により、onEvent 呼び出し元スレッドがそのメソッドから返されず、onEvent() 内で無限に待機しているように見えるためです。

現時点では、その呼び出しのタイムアウトを作成することはできません。

質問は::

ディスラプター エンジンが onEvent() を呼び出すとき、バッファ作成レベルまたはその他のレベルでタイムアウトを設定できますか。onEvent() メソッド呼び出しでタイムアウトが発生します。

BlockingWaitStrategy でディスラプター 3.3.2 を使用しています。

4

1 に答える 1

0

ディスラプターは、イベント ハンドラーのタイムアウトをサポートしていません。ただし、これを回避するいくつかの可能な方法を考えることができます。

最も単純な変更は、問題のある AMQP 呼び出しを、呼び出す先のfutureでラップすることですFuture#get(timeout, TimeUnit)

長時間実行されるタスクを別のディスラプターに送信して処理するか、future をイベントの別のフィールドに書き込み、2 番目の eventHandler でそれを処理する方法については、他のオプションがあります。

于 2016-04-13T05:25:00.133 に答える