2017-04-12 74 views
2

我計劃在我的干擾者中擁有許多平行消費者。Lmax Disruptor,許多消費者 - 如何讓消費者只接受特定類型的消息並獨立進行?

我需要每個消費者只消費對他們有意義的消息。

例如,我有類型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?

重要提示:我希望處理是獨立的。消費者不應鏈接在一起,每個人都獨立行走緩衝區。如果A的消費者比C的消費者慢,那麼「C類」消費者對#6消費者的處理可能早於A類型的消費者。

我很感激有關如何使用LMAX disruptor config進行解釋的解釋。

回答

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

將disruptor配置爲使用單一類型的對象,但創建多個干擾器,每個對象類型一個。在上面的例子中,會有三個獨立的干擾者。

相關問題