生产者 - 消费者阻止队列与消费者过滤

时间:2012-07-10 22:40:41

标签: java producer-consumer blockingqueue

我正在尝试在java中编写一个生产者 - 消费者模式。我是通过一系列不同连接连接到许多服务器的网络客户端。服务器产生不同的“工作”数据包,这些数据包都被放入一个阻塞队列中。我正在尝试阻止我的消费者,只有特定类型的工作包才能传递给特定的消费者。

示例:

  • 阻塞队列中填充了三种不同类型的工作包对象:A,B,C
  • 两个消费者正在等待工作包对象。消费者1只需要类型A而消费者2只需要类型B或C

java.util中是否有一些标准类...或者我是否必须自己编写类?另外,如果需要,最好的方法是自己滚动吗?

提前致谢!

Andrew Klofas

2 个答案:

答案 0 :(得分:2)

在java.util中没有一种标准的方法可以做到这一点,但这是一个简单的设计:

我假设A,B,C都实现接口D,并且如果A与B和C无序处理则无关紧要。

使用一组排序使用者拥有一个“输入”BlockingQueue。这些消费者确定队列中对象的类型,并将它们提供给真实工作者所从的独立的特定于类型的“输出”队列。是否存在一些要求您只有一个队列的约束?

答案 1 :(得分:2)

您可以使用标准JMS获得此行为。您的生产者创建放置在JMS主题上的消息。消费者使用过滤订阅订阅该主题:这样,订阅者X只获得X类消息。 (有关API)订阅的更多信息

持久订阅者将满足您对每个订阅者排队邮件的要求。

这是一个发布/订阅模型。