我想使用LMAX的破坏者,但我不确定我的用例是否适合它。基本上有一个或两个生产者和n个消费者。诀窍在于,当消费者收到一个事件并检查一些数据时,如果它不能立即消费,它必须重新发布数据(它基本上是一个轮询方案)。我创建了具有容量的环形缓冲区,我不担心它太小但现在我的问题是:请求新序列并从事件处理程序发布是否安全,或者这可能会以某种方式破坏功能?从一个小测试我觉得这似乎足够安全,但我不知道它将如何在我的特定情况下表现。我担心在请求序列之后但在更新之前可能会调用onEvent方法 - >发布新对象,我真的不知道破坏者如何处理这些案件
答案 0 :(得分:0)
执行此操作的一种方法(没有EventHandler
重新发布事件)将实现单独的“重新发布”Disruptor
。如果消费者线程发现它不能立即使用事件,它会将事件写入该缓冲区,然后单独的线程将这些消息传递回主事件队列。
这将增加主队列的写入者数量,但考虑到用例,这似乎是不可避免的。此解决方案的另一个潜在问题是,在重新发布之前添加到主队列的任何新消息之后,必须使用消耗重新发布的事件。