java中的轻量级发布/订阅框架

mdm*_*dma 44 java frameworks publish-subscribe

是否有一个提供发布/订阅模式的java的轻量级框架?

一些理想的功能

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

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

编辑:所有在同一过程中.来自beans的PropertyChangeListener并没有完全削减它,因为它报告了属性的变化,而不是发布特定的项目.我可以通过拥有"最后发布的对象"属性以及已发布的对象来使用工作模式来使用ProprtyChangeListener.PropertyChangeListeners不支持泛型,并且在属性更改语义中是根深蒂固的,而不是纯粹的发布/订阅.java.util Observer/Observable模式会很好,但是Oberver是一个具体的类.

And*_*ejs 28

这似乎符合要求:

来自Google Guava Library的EventBus - "组件之间的发布 - 订阅式通信,无需组件明确地相互注册".它也可以是AsyncEventBus,它将在另一个线程上调度事件.

一些额外的选择:

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

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

  • 观察者模式似乎意味着可观察者和观察者的知识,而真正的发布/订阅允许代码独立性。Guava 的 EventBus 看起来更适合这一点。 (2认同)

Tim*_*per 13

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

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


ska*_*man 8

既然你正在使用Spring,我不知道你是否意识到Spring有自己的轻量级事件框架.它主要在框架内部使用,但它完全可以被应用程序代码使用.

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