Java中的轻量级消息传递(异步调用)

Ser*_*nov 9 java messaging

我正在寻找Java中的轻量级消息传递框架.我的任务是以SEDA的方式处理事件:我知道处理的某些阶段可以快速完成,而其他阶段则不能完成,并且希望将这些处理阶段分离.

假设我有组件A和B以及处理引擎(这个容器或其他任何东西)调用组件A,组件A又调用组件B.我不关心组件B的执行时间是否为2秒,但是我确实关心执行例如,组分A的时间低于50ms.因此,组件A向B提交消息似乎是最合理的,B将在所需的时间处理.

我知道不同的JMS实现和Apache ActiveMQ:它们对此非常重要.我搜索了一些轻量级消息(具有消息序列化和最简单的路由等真正的基本功能)无济于事.

在这个问题上你有什么值得推荐的吗?

Chr*_*ung 5

真的轻吗?执行者。:-) 所以你设置了一个执行器(B,在你的描述中),A 只是将任务提交给执行器。


Jam*_*han 5

您是否需要任何类型的持久性(例如,如果您的 JVM 在处理数以千计的消息之间死亡)并且您是否需要消息来遍历任何其他 JVM?

如果这一切都在单个 JVM 中,并且您无需担心 JVM 死机时的事务、恢复或消息丢失 - 那么正如 Chris 上面所说,Executors 很好。

ActiveMQ 非常轻量级;如果您愿意,您可以仅在没有持久性的情况下在单个 JVM 中使用它;然后,您可以在需要时启用事务/持久性/恢复/远程处理(使用多个 JVM)。但是,如果您不需要这些东西,那么它就有点矫枉过正了——只需使用 Executors。

顺便说一句,如果您不确定哪些步骤可能需要多个 JVM 的持久性/可靠性或负载平衡,另一种选择是完全隐藏中间件的使用,以便您可以在需要时在带有执行程序的内存 SEDA 队列和 JMS/ActiveMQ 之间切换到。

例如,某些步骤可能需要可靠且可恢复(因此需要某种持久性),而其他时候则不需要。