首页 文章

生产环境 者/消费者:一个 生产环境 者,多个消费者,每个人都在相同的数据上工作

提问于
浏览
3

我有一个 生产环境 者/消费者场景,我不是一个 生产环境 者来提供产品和多个消费者来消费这些产品 . 但是,常见的情况是,交付的产品仅由一个消费者消费,而其他消费者从未看到此特定产品 . 我想要完成的是每个消费者只消费一次产品而没有任何阻塞 .

我的第一个想法是使用多个BlockingQueues,每个消费者一个,并使Producer将每个产品按顺序放在所有可用的BlockingQueues中 . 但是,如果其中一个队列阻塞(例如,队列已满),则 生产环境 者无法继续 . 另一方面,为每个产品生成一个新的Thread以将产品放入队列似乎不是一个好的解决方案,因为如果队列已满,将创建越来越多的线程 .

问题是,在我的场景中,一个消费者可能需要更多的时间来处理产品而不是另一个消费者,具体取决于输入 . 调整BlockingQueues的容量也很困难,因为消费者的处理时间实际上是不可预测的 .

可以想到更优雅的解决方案吗?或者是否可以动态增加/减少BlockingQueues的容量以 balancer 填充水平?

2 回答

  • 1

    看看Guava的EventBus,它是Guava图书馆的一部分,处理进程中的PubSub式通信 . 它可能适合您的需求,让您免于重新发明一些轮子 .

    如果您正在寻找进程间通信,请考虑像Evgeniy提议的消息队列 .

  • 1

    看起来你需要JMS的发布/订阅风格,你可以尝试ActiveMQ http://activemq.apache.org/download.html,它有很多选项,你一定会找到一个最适合你需要的选项

相关问题