Java 中的轻量级发布/订阅框架 [已关闭]

2022-08-31 23:41:53

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

一些理想的功能

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

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

编辑:所有这些都在同一个过程中。来自 bean 的 PropertyChangeListener 并不能完全削减它,因为它报告属性的更改,而不是发布特定项。我可以通过拥有“上次发布的对象”属性来硬塞PrortyChangeListener工作,从而获得已发布的对象。PropertyChangeListener 不支持泛型,并且根深蒂固地存在于属性更改语义中,而不是纯粹的发布/订阅。java.util Observer/Observable 模式会很好,但 Oberver 是一个具体的类。


答案 1

这似乎符合要求:

来自Google Guava Library的EventBus - “组件之间的发布 - 订阅式通信,而无需组件彼此显式注册”。它也可以是 AsyncEventBus,它将在另一个线程上调度事件。

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

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

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


答案 2

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

我相信JMS作为Message Pub/Sub的API是很容易的。(而且不是更容易;)


推荐