2017-04-12 9 views
2

私は混乱の中で多くの並列消費者を持つことを計画しています。Lmax Disruptor、多くの消費者 - どのようにして消費者を特定の種類のメッセージにして、独立して進めるのか?

各消費者は、それらのためのメッセージを消費する必要があります。例えば

、IはタイプA、B、Cのメッセージを持っていると私はタイプごとに消費者を有する

#1 - type A, #2 - type B, #3 - type C, #4 - type A, #5 - type C, #6 - type C, (and so on) 

ようにバッファしています。どのように私はAのための消費者を達成することができますメッセージ1と4、タイプB - メッセージ2、C - メッセージ3,5,6?

重要:処理を独立させたいです。消費者は連鎖してはならず、それぞれバッファを独立して移動する必要があります。 「タイプC」消費者による#6の処理は、Aの消費者がCよりも遅い場合、タイプAの#1より早く参加する可能性があります。

LMAX混乱の設定でそれを行う方法を理解しています。

答えて

4

典型的なパターンは、シーケンス番号を使用することです。たとえば、4つのイベントハンドラが混乱しているとします。それぞれに固有の番号を付けると、メッセージを受け入れるかどうかを選択できます。

void onEvent(T event, long sequence, boolean endOfBatch) throws Exception { 
    // instanceNumber could be assigned in a constructor 
    if ((sequence % 4) != instanceNumber) 
     // message isn't for me 
     return; 
    } 
    // do my thing 
} 
1

1つのタイプのオブジェクトを使用するようにディザスターを設定しますが、オブジェクトタイプごとに1つずつ、複数のディスターサーを作成します。上記の場合、3つの別個の混乱者が存在する。

関連する問題