【发布时间】:2009-09-29 20:14:35
【问题描述】:
是否有可能在消息生产者端获得某种通知,即新订阅者加入了该主题?尤其是 JBoss Messaging 是否可以实现?
【问题讨论】:
是否有可能在消息生产者端获得某种通知,即新订阅者加入了该主题?尤其是 JBoss Messaging 是否可以实现?
【问题讨论】:
主题订阅者(消费者)存储在 JBoss 的 TopicSession 实现 (JBMSession) 内的私有字段中。这些类都没有提供对该字段的访问方法,因此如果不进行黑客攻击(反射),我认为无法解决该问题。
但如果您可以使用反射并且不介意使用它,那么以下策略可能会接近您想要的:
实现一个 JBMSessionObserver 对于主题会话。这节课 将反映私有 Set 消费者,跟踪变化 定期(如每 1 秒或 所以)并通知注册的听众 通过发送事件。
实现 JBMSessionObserverListener(s), 注册他们 JBMSessionObserver 接收更改 事件。
您将遇到的下一个问题是,JBMSession 只存储 MessageListeners 并且不知道 Listener 的所有者。侦听器没有唯一的键或名称。它们只是提供了一种处理消息的方法。
因此,您可能能够获得新侦听器已加入的信息,但您可能无法识别侦听器背后的真实消费者。
【讨论】: