0

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

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

使用队列和/或主题的组合来实现这一点的最佳方法是什么?GUI 应该总是被通知,但它不应该从队列中消耗任何东西?

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

举一个更具体的例子:

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

1 回答 1

1

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

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

高温高压

于 2012-05-11T15:12:31.470 回答