10

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

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

我知道不同的 JMS 实现和 Apache ActiveMQ:它们对于这个来说太重了。我搜索了一些轻量级消息传递(具有消息序列化和最简单路由等非常基本的功能)但无济于事。

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

4

5 回答 5

5

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

于 2008-10-17T08:57:50.767 回答
5

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

如果它全部在单个 JVM 中,并且如果 JVM 死了,您无需担心事务、恢复或消息丢失 - 那么正如 Chris 上面所说,执行器很好。

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

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

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

于 2008-10-17T09:49:09.727 回答
2

我认为 Apache Camel 可以满足您的所有需求。它在 JVM 中工作,并支持 SEDA 样式 ( http://camel.apache.org/seda.html ) 和 simpe 路由。可以单独使用,也可以与 spring、JMS 提供程序或其他适配器一起使用。

于 2009-11-16T13:38:34.640 回答
1

很抱歉复活了一个旧线程,但也许它可以帮助其他人阅读它......我认为FFMQ是轻量级消息传递框架的一个很好的候选者。

更新:但是我不确定它是否支持重新交付延迟(死信队列问题)。即使对于轻量级提供商,我也会发现这很有用。但我想结合使用 MessageSelector 查询和消息属性是可能的。

于 2010-06-11T15:20:38.893 回答
0

为了帮助其他人阅读此线程:
最轻的消息传递框架之一是Mbasseder。MBassador 是遵循发布订阅模式的非常轻量级的消息(事件)总线实现。它旨在易于使用,旨在提供丰富的功能和可扩展性,同时保持资源效率和性能。
MBassador 高性能的核心是一种专门的数据结构,可以最大限度地减少锁争用,从而最大限度地减少并发访问的性能下降。
特点:通过注释、同步和/或异步事件传递、弱引用、消息过滤的声明式侦听器定义

于 2014-11-22T07:48:35.303 回答