java - Disrupror 消费者重新提交数据

标签 java message-passing disruptor-pattern

我想使用 LMAX 的干扰器,但我不确定我的用例是否适合它。基本上有 1 或 2 个生产者和 n 个消费者。诀窍在于,当消费者接收到事件并检查其中的一些数据时,如果它不能立即使用它,则必须重新发布数据(这基本上是一种轮询方案)。我创建的环形缓冲区的容量我并不担心太小,但现在我的问题是:请求新序列并从事件处理程序发布是否安全,或者这会以某种方式破坏功能吗?从我做的一个小测试来看,这似乎足够安全,但我不知道它在我的特定情况下会如何表现。我担心 onEvent 方法可能会在我请求序列之后但在我更新->发布新对象之前被调用,而且我真的不知道破坏者如何处理这些情况

最佳答案

实现此目的的一种方法(无需 EventHandler 重新发布事件)是实现一个单独的“重新发布”Disruptor。如果使用者线程发现它无法立即使用事件,它会将事件写入该缓冲区,然后单独的线程会将这些消息传递回主事件队列。

这将增加主队列的写入者数量,但考虑到用例,这似乎是不可避免的。此解决方案的另一个潜在问题是,重新发布的事件必须在重新发布之前添加到主队列中的任何新消息之后才被使用。

关于java - Disrupror 消费者重新提交数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19359336/

相关文章:

Java 8 流 API : get all nodes after specific Node

java - 消息传递(例如 JMS)何时可以替代多线程?

message-queue - 如何使用 pid 在进程之间发送/接收消息

Java Disruptor 处理异常

java - 干扰者 : setting the sequence on startup

java - 在浏览器中通过 http 公开 GlassFish 日志文件 (server.log)

java - Spring 数据休息 : Detected multiple association links with same relation type

java - Firebase数据库如何从1个引用中获取一些值并等于2个引用来获取其键和值

javascript - Chrome 扩展——将 popup.js 中的数组传递到注入(inject)的 javascript 文件中

java - 可观察到像 Lmax Disruptor 这样的批处理