30

我正在为一个新的 Java Web 应用程序设计后端,并试图决定是否使用事件总线;特别是番石榴EventBus

大多数服务器端请求将是同步的:也就是说,用户正在请求数据并且需要在几秒钟内得到响应。但是,也有相当多的请求可以是异步的,并且在客户端是“一劳永逸”的。只要它们最终得到处理,如果需要 2 秒或 2 小时来处理,客户可能不太在意。

对于这些异步请求,我计划让侦听映射 URL 的 servlet 将请求发布到队列。然后,消费者将出列每个请求并将其路由到适当的处理程序。这是EventBus可能或可能不会发挥作用的地方。将请求路由到正确的处理程序的业务逻辑非常复杂。通常骆驼路线将是完美的解决方案。在我的用例中,我想知道是否可以将一堆“处理器”(事件处理程序)连接到同一个事件总线,然后让每个处理器相互触发和接收事件,直到最终结果是产生。

我想说我已经探索过使用 Apache Camel,并且我相信 Camel 是完成这项工作的正确工具。可悲的是,由于这个问题范围之外的原因,我不会使用它。所以我开始想出类似骆驼的解决方案,这就是我如何到达 Guava 的EventBus. 但它可能不是一个合适的替代品。

我想我正在寻找Event Bus模式解决的问题分类,然后我需要确定它是否与我的用例匹配。

4

1 回答 1

51

EventBus这是简而言之解决的问题陈述:

“我想要一种简单、集中的方式来通知对特定类型事件感兴趣的代码,当这些事件发生时,发布事件的代码和接收它的代码之间没有任何直接耦合。”

当您说“将请求路由到正确的处理程序的业务逻辑非常复杂”时,我怀疑EventBus可能不是您要寻找的,因为它仅基于 Java 对象类进行路由(尽管您可以做一些花哨的事情在事件类上实现接口并让订阅者订阅特定接口)。

于 2013-02-07T23:14:50.700 回答