Lmax Disruptor,许多消费者 - 如何让消费者只接受特定类型的消息并独立进行?
Posted
技术标签:
【中文标题】Lmax Disruptor,许多消费者 - 如何让消费者只接受特定类型的消息并独立进行?【英文标题】:Lmax Disruptor, many consumers - how make consumer take only messages of particular kind and proceed independently? 【发布时间】:2017-09-08 07:58:43 【问题描述】:我计划在我的破坏者中拥有许多并行消费者。
我需要每个消费者只消费为他们准备的消息。
例如,我有 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 中断器配置进行此操作。
【问题讨论】:
【参考方案1】:典型的模式是使用序列号——假设你有 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
【讨论】:
【参考方案2】:将破坏者配置为使用单一类型的对象,但创建多个破坏者,每个对象类型一个。在上述情况下,将有三个独立的破坏者。
【讨论】:
以上是关于Lmax Disruptor,许多消费者 - 如何让消费者只接受特定类型的消息并独立进行?的主要内容,如果未能解决你的问题,请参考以下文章