我有一个Java的生产者 - 消费者模型,有多个消费者。我在具有变量的生产者和消费者之间传递一个对象,我们称之为“名称”。
现在,此名称可以是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
这样的事情会起作用,还是会对我的线程同步造成严重破坏?如果它不起作用,我应该使用什么模型来实现它?
答案 0 :(得分:0)
最简单的方法是在发布消息时定义消息头。然后,您可以拥有多个使用者,每个使用者都使用唯一的MessageSelectors查找特定的邮件头。这样,只有正确的消费者才能获得消息,而且如果不正确的消费者收到消息,您不必担心重新发布消息(效率非常低,并且在加载的系统上不能很好地处理大量消息的工作方式通过系统)。
http://docs.oracle.com/javaee/1.3/jms/tutorial/1_3_1-fcs/doc/prog_model.html