在JMS中有队列和主题。据我所知,到目前为止,队列最适合用于生产者/消费者场景,其中主题可用于发布/订阅。但是在我的场景中,我需要一种方法来组合两种方法并创建一个生产者 - 消费者 - 观察者体系结构。
特别是我有生成器写入一些队列和工作者,这些队列和工作者从这些队列中读取并处理这些队列中的消息,然后将其写入不同的队列(或主题)。每当工作人员完成一项工作时,我的GUI应该得到通知并更新其当前系统状态的表示。由于worker和GUI是不同的进程,我无法应用简单的观察者模式或直接通知GUI。
使用队列和/或主题组合实现此目标的最佳方法是什么?应该始终通知GUI,但它永远不应该从队列中消耗任何东西?
我想直接使用JMS解决这个问题,而不是使用任何其他技术(如RMI)来实现观察者部分。
举一个更具体的例子:
PACKAGEQUEUE
)的包的队列,由机器生成(PackageProducer
)PACKAGEQUEUE
获取一个地址,然后将其写入MAILQUEUE
(AddressWorker
)MAILQUEUE
并通过邮件(MailWorker
)发送包裹。MAILQUEUE
时,我想通知GUI并更新包的状态。当然,GUI不应该使用MAILQUEUE
中的消息,只有MailWorker
必须使用它们。答案 0 :(得分:1)
您可以为解决方案使用队列和主题的组合。
您的GUI应用程序可以订阅主题,例如MAILQUEUE_NOTIFICATION
。每次(即在步骤2)PackageProducer
将消息写入MAILQUEUE
,该消息的副本应发布到MAILQUEUE_NOTIFICATION
主题。由于GUI应用程序已订阅该主题,因此它将获得包含有关包状态的信息的该发布。可以使用该出版物的内容更新GUI。
HTH