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