我在Java中有一个具有多个消费者的生产者-消费者模型。我在生产者和消费者之间传递一个对象,这个对象有一个变量,我们称它为"name“。
现在,这个名称可以是A、B或C。如果值是A,则一个消费者将从队列中取出它并对其执行某些操作。如果该值为B,则不同的使用者会将其从同一队列中取出,并执行其他操作。如果该值为C,则第三个消费者也会执行同样的操作。
我的问题是如何实现这一点。我目前的理论如下(用伪代码表示):
// This is code for each consumer
pull item off the queue
check if item.name is right for this consumer (A, B, or C)
if so, send it to consume()
else, put it back on the queue这样的东西可以工作吗,或者它会对我的线程同步造成严重破坏吗?如果它不能工作,我应该使用什么模型来实现它?
发布于 2013-02-25 10:27:03
最简单的方法是在消息发布时定义消息头。然后,您可以有多个消费者,每个消费者都有唯一的MessageSelectors,用于查找特定的消息头。这样,只有正确的消费者才能获得消息,而如果错误的消费者得到消息,您就不必担心重新发布消息(这效率非常低,并且在加载的系统中有大量消息在系统中工作,这是不好的)。
http://docs.oracle.com/javaee/1.3/jms/tutorial/1_3_1-fcs/doc/prog_model.html
https://stackoverflow.com/questions/15059109
复制相似问题