2017-04-12 3 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에 대한 소비자가 B - 메시지 2, C - 메시지 3, 5, 6에 대해 메시지 1과 4를 취하는 방법은 무엇입니까?

중요 : 처리를 독립적으로하고 싶습니다. 소비자는 각각 독립적으로 버퍼를 이동하여 체인을 연결해서는 안됩니다. A 유형의 소비자가 C보다 느린 경우, "유형 C"소비자에 의한 # 6 처리는 유형 A에 대해 # 1보다 먼저 참여할 수 있습니다.

LMAX Disruptor 구성을 사용하여 수행하는 방법에 대해 감사하게 생각합니다.

답변

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

단일 유형의 개체를 사용하지만 각 개체 유형마다 하나씩 여러 가지 방해 요소를 만들도록 방해자를 구성합니다. 위의 경우에는 3 개의 분리 된 붕괴자가있을 것입니다.