我正在尝试在java中编写一个生产者 - 消费者模式。我是通过一系列不同连接连接到许多服务器的网络客户端。服务器产生不同的“工作”数据包,这些数据包都被放入一个阻塞队列中。我正在尝试阻止我的消费者,只有特定类型的工作包才能传递给特定的消费者。
示例:
java.util中是否有一些标准类...或者我是否必须自己编写类?另外,如果需要,最好的方法是自己滚动吗?
提前致谢!
Andrew Klofas
答案 0 :(得分:2)
在java.util中没有一种标准的方法可以做到这一点,但这是一个简单的设计:
我假设A,B,C都实现接口D,并且如果A与B和C无序处理则无关紧要。
使用一组排序使用者拥有一个“输入”BlockingQueue。这些消费者确定队列中对象的类型,并将它们提供给真实工作者所从的独立的特定于类型的“输出”队列。是否存在一些要求您只有一个队列的约束?
答案 1 :(得分:2)
您可以使用标准JMS获得此行为。您的生产者创建放置在JMS主题上的消息。消费者使用过滤订阅订阅该主题:这样,订阅者X只获得X类消息。 (有关API)订阅的更多信息
持久订阅者将满足您对每个订阅者排队邮件的要求。
这是一个发布/订阅模型。