我想使用 LMAX 的干扰器,但我不确定我的用例是否适合它。基本上有 1 或 2 个生产者和 n 个消费者。诀窍在于,当消费者接收到事件并检查其中的一些数据时,如果它不能立即使用它,则必须重新发布数据(这基本上是一种轮询方案)。我创建的环形缓冲区的容量我并不担心太小,但现在我的问题是:请求新序列并从事件处理程序发布是否安全,或者这会以某种方式破坏功能吗?从我做的一个小测试来看,这似乎足够安全,但我不知道它在我的特定情况下会如何表现。我担心 onEvent 方法可能会在我请求序列之后但在我更新->发布新对象之前被调用,而且我真的不知道破坏者如何处理这些情况
最佳答案
实现此目的的一种方法(无需 EventHandler
重新发布事件)是实现一个单独的“重新发布”Disruptor
。如果使用者线程发现它无法立即使用事件,它会将事件写入该缓冲区,然后单独的线程会将这些消息传递回主事件队列。
这将增加主队列的写入者数量,但考虑到用例,这似乎是不可避免的。此解决方案的另一个潜在问题是,重新发布的事件必须在重新发布之前添加到主队列中的任何新消息之后才被使用。
关于java - Disrupror 消费者重新提交数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19359336/