Lmax Disruptor,许多消费者 - 如何让消费者只接受特定类型的消息并独立进行?

时间:2017-04-12 13:37:55

标签: java concurrency disruptor-pattern lmax

我计划在我的破坏者中有许多并行的消费者。

我需要每个消费者只消费适合他们的消息。

例如,我有类型A,B,C的消息,我有像

这样的缓冲区
 #1 - type A, #2 - type B, #3 - type C,  #4 - type A, #5 - type C, #6 - type C,  (and so on)

我有每种类型的消费者。对于类型B,我如何实现A的消费者将获取消息1和4 - 消息2,C消息3,5,6?

重要提示:我希望处理是独立的。消费者不应该被链接,每个人都独立地在缓冲区中旅行。如果A的消费者比C的消费者慢,那么“C型”消费者对#6的处理可能比#1的#1更早。

我很感激如何使用LMAX disruptor配置解释。

2 个答案:

答案 0 :(得分: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)

将破坏程序配置​​为使用单一类型的对象,但创建多个破坏程序,每个对象类型一个。在上面的例子中,会有三个独立的破坏者。