2

我在 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

像这样的东西会起作用,还是会对我的线程同步造成严重破坏?如果它不起作用,我应该使用什么模型来实现它?

4

1 回答 1

0

最简单的方法是在消息发布时定义消息头。然后你可以有多个消费者,每个消费者都有唯一的 MessageSelector 来寻找特定的消息头。这样,只有正确的消费者才能收到消息,如果不正确的消费者收到消息,您不必担心重新发布消息(这非常低效,并且在有大量消息的负载系统上不会很好)通过系统)。

http://docs.oracle.com/javaee/1.3/jms/tutorial/1_3_1-fcs/doc/prog_model.html

于 2013-02-25T02:27:02.667 回答