JMS Producer-Consumer-Observer(PCO)

时间:2012-05-10 09:26:48

标签: jms producer-consumer

在JMS中有队列和主题。据我所知,到目前为止,队列最适合用于生产者/消费者场景,其中主题可用于发布/订阅。但是在我的场景中,我需要一种方法来组合两种方法并创建一个生产者 - 消费者 - 观察者体系结构。

特别是我有生成器写入一些队列和工作者,这些队列和工作者从这些队列中读取并处理这些队列中的消息,然后将其写入不同的队列(或主题)。每当工作人员完成一项工作时,我的GUI应该得到通知并更新其当前系统状态的表示。由于worker和GUI是不同的进程,我无法应用简单的观察者模式或直接通知GUI。

使用队列和/或主题组合实现此目标的最佳方法是什么?应该始终通知GUI,但它永远不应该从队列中消耗任何东西?

我想直接使用JMS解决这个问题,而不是使用任何其他技术(如RMI)来实现观察者部分。

举一个更具体的例子:

  1. 我有一个包含(PACKAGEQUEUE)的包的队列,由机器生成(PackageProducer
  2. 我有一名工作人员从PACKAGEQUEUE获取一个地址,然后将其写入MAILQUEUEAddressWorker
  3. 另一名工作人员处理MAILQUEUE并通过邮件(MailWorker)发送包裹。
  4. 在步骤2之后,当消息写入MAILQUEUE时,我想通知GUI并更新包的状态。当然,GUI不应该使用MAILQUEUE中的消息,只有MailWorker必须使用它们。

1 个答案:

答案 0 :(得分:1)

您可以为解决方案使用队列和主题的组合。

您的GUI应用程序可以订阅主题,例如MAILQUEUE_NOTIFICATION。每次(即在步骤2)PackageProducer将消息写入MAILQUEUE,该消息的副本应发布到MAILQUEUE_NOTIFICATION主题。由于GUI应用程序已订阅该主题,因此它将获得包含有关包状态的信息的该发布。可以使用该出版物的内容更新GUI。

HTH