3

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

我需要每个消费者只消费为他们准备的消息。

例如,我有 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 - 消息 2,C - 消息 3、5、6,我如何实现 A 的消费者将接收消息 1 和 4?

重要提示:我希望处理是独立的。消费者不应该被链接起来,每个消费者独立地在缓冲区中移动。如果 A 的消费者比 C 慢,“类型 C”消费者对 #6 的处理可能比类型 A 的 #1 更早参与。

我很感激解释如何使用 LMAX 破坏器配置来做到这一点。

4

2 回答 2

6

典型的模式是使用序列号——假设你有 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
}
于 2017-04-18T19:03:15.413 回答
1

将中断器配置为使用单一类型的对象,但创建多个中断器,每个对象类型一个。在上述情况下,将有三个独立的破坏者。

于 2017-04-12T16:25:35.657 回答