我正在为新的Java Web应用程序设计后端,并且正在尝试决定是否使用事件总线;特别是Guava EventBus
。
大多数服务器端请求都是同步的:也就是说,用户正在请求数据并且需要在几秒钟内响应。但是,也有相当多的请求可以是异步的,并且在客户端是“一劳永逸”。只要它们最终被处理,如果需要2秒钟处理或2小时,客户可以更少关心。
对于这些异步请求,我计划让servlet监听映射的URL,将请求发布到队列。然后,消费者将每个请求出列并将其路由到适当的处理程序。这是EventBus
可能会或可能不会发挥作用的地方。将请求路由到正确的处理程序的业务逻辑非常复杂。通常情况下,骆驼路线将是完美的解决方案。在我的用例中,我想知道我是否可以将一堆“处理器”(事件处理程序)连接到同一个事件总线,然后让每个事件相互触发和接收事件,直到最终结果为止。产生的。
我想说我已经探索过使用Apache Camel,我相信Camel是这里工作的合适工具。可悲的是,由于这个问题范围之外的原因,我不打算使用它。所以我开始想起类似Camel的解决方案,这就是我到达Guava的EventBus
的方式。但它可能不是一个合适的替代品。
我想我正在寻找Event Bus
模式解决的问题分类,然后我需要确定这是否符合我的用例。
答案 0 :(得分:38)
以下是EventBus
解释的问题陈述:
“我想要一种简单,集中的方式来通知在事件发生时对特定类型的事件感兴趣的代码,而不会在发布事件的代码与接收事件的代码之间直接耦合。”
当您说“将请求路由到正确的处理程序的业务逻辑非常复杂”时,我怀疑 EventBus
可能不是您正在寻找的内容,因为它仅基于Java对象类的路由(尽管您可以通过在事件类上实现接口并让订阅者订阅特定接口来做一些奇特的事情。)