Ask*_*mov 3 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)
Run Code Online (Sandbox Code Playgroud)
我有每种类型的消费者。我怎样才能让 A 的消费者接受消息 1 和 4,对于类型 B - 消息 2,C - 消息 3、5、6?
重要提示:我希望处理是独立的。消费者不应该被链接起来,每个人都独立地在缓冲区中移动。如果 A 的消费者比 C 的消费者慢,则“类型 C”消费者对 #6 的处理可能会早于类型 A 的 #1 参与。
我很欣赏如何使用 LMAX 干扰器配置来做到这一点的解释。
典型的模式是使用序列号——假设你有 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
}
Run Code Online (Sandbox Code Playgroud)