【发布时间】:2012-05-18 20:29:52
【问题描述】:
在 JMS 中有队列和主题。据我了解,到目前为止,队列最适合用于生产者/消费者场景,其中主题可用于发布/订阅。但是在我的场景中,我需要一种方法来结合这两种方法并创建一个生产者-消费者-观察者架构。
特别是我有生产者写入一些队列和工作人员,它们从这些队列中读取并处理这些队列中的消息,然后将其写入不同的队列(或主题)。每当工作人员完成一项工作时,我的 GUI 应该被通知并更新其当前系统状态的表示。由于工人和 GUI 是不同的进程,我不能应用简单的观察者模式或直接通知 GUI。
结合使用队列和/或主题来实现这一点的最佳方式是什么? GUI 应该总是被通知,但它不应该从队列中消耗任何东西?
我想直接用 JMS 解决这个问题,而不是使用任何额外的技术,如 RMI 来实现观察者部分。
举一个更具体的例子:
- 我有一个包裹队列 (
PACKAGEQUEUE),由机器生产 (PackageProducer) - 我有一个工人从
PACKAGEQUEUE中取出一个包裹,添加一个地址,然后将其写入MAILQUEUE(AddressWorker) - 另一个工作人员处理
MAILQUEUE并通过邮件 (MailWorker) 发送包裹。 - 在第 2 步之后,当向
MAILQUEUE写入消息时,我想通知 GUI 并更新包的状态。当然 GUI 不应该消费MAILQUEUE中的消息,只有MailWorker必须消费它们。
【问题讨论】:
标签: jms producer-consumer