47

是否有提供发布/订阅模式的良好 Java 轻量级框架?

一些理想的特征

  • 支持泛型
  • 向发布者注册多个订阅者
  • API 主要是接口和一些有用的实现
  • 不需要纯粹的内存、持久性和事务保证。

我知道 JMS,但这对我的需要来说太过分了。发布/订阅的数据是文件系统扫描的结果,扫描结果被馈送到另一个组件进行处理,然后在被馈送到另一个组件之前对其进行处理,依此类推。

编辑:都在同一个过程中。bean 中的 PropertyChangeListener 并没有完全消除它,因为它报告属性的更改,而不是发布特定的项目。我可以通过拥有“最后发布的对象”属性以及发布的对象来强制 ProprtyChangeListener 工作。PropertyChangeListeners 不支持泛型,并且根深蒂固于属性更改语义,而不是纯粹的发布/订阅。java.util Observer/Observable 模式会很好,但 Oberver 是一个具体的类。

4

6 回答 6

31

这似乎符合要求:

来自 Google Guava 库的EventBus - “组件之间的发布订阅式通信,无需组件相互显式注册”。它也可以是一个AsyncEventBus,它将在另一个线程上分派事件。

需要考虑的一些额外选项:

  1. 如果它在同一进程中,则可以使用观察者模式。订阅者可以添加侦听器并接收事件通知。Observable已经是 Java API 的一部分。

  2. FFMQ是一个完整的 Java、轻量级、快速 JMS 1.1 队列实现。

于 2012-03-25T11:11:15.930 回答
11

JMS 与您的配置一样轻或重。例如,我们在一个带有内存队列的项目中使用HornetQ 。它易于设置,不需要任何基于 JNDI 的配置,并且非常易于使用。

我相信 JMS 作为 Message Pub/Sub 的 API 非常简单。(而且并不容易;)

于 2010-06-13T16:11:14.033 回答
8

由于您使用的是 Spring,不知道您是否知道 Spring 有自己的轻量级事件框架。它主要在框架本身内使用,但它完全可以被应用程序代码使用。

默认情况下,它是同步 pub/sub,但您可以使用ApplicationEventMulticaster.

于 2010-06-13T17:11:55.367 回答
1

我认为骆驼也是一个不错的候选人。尤其是发布订阅模式

骆驼可以嵌入并且重量轻。它提出了企业集成模式——许多有用的集成工具,在应用程序内部甚至与其他参与者(因此是“集成”)。

它与Spring Integration相比,但更完整的 IMO。

于 2013-05-06T12:32:27.503 回答
0

如果您要跨越流程边界,那么将会产生某种程度的“重量”。为什么说JMS是重量级的?API很简单?据说有轻量级的实现,例如链接文本较重的成本,例如持久性和事务性是可选的。

你需要什么比这更轻的?

于 2010-06-13T16:03:22.953 回答
0

Bob LeeQueueFilehttp://snipt.org/GWm/上有一个您可能会感兴趣的课程。这是一个简单的持久队列,可以被多个消费者使用。听起来您不需要持久性,但由于整个事情是如此轻量级,它仍然很有用。

于 2010-12-29T02:39:08.513 回答