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

时间:2008-10-17 08:53:55

标签: java messaging

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

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

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

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

5 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

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

如果它只在一个JVM中运行,并且你不需要担心如果JVM死掉事务,恢复或消息丢失 - 那么正如Chris上面所说,Executors就可以了。

ActiveMQ非常轻巧;如果你愿意,你可以在一个JVM中使用它而没有持久性;然后,您可以根据需要启用事务/持久性/恢复/远程处理(使用多个JVM)。但是,如果你不需要这些东西那么它就是过度杀伤 - 只需使用Executors。

顺便提一下,如果您不确定哪些步骤可能需要持久性/可靠性或对多个JVM进行负载平衡,那么另一个选项是hide the use of middleware completely,这样您就可以在执行程序的内存SEDA队列之间切换到JMS / ActiveMQ。你需要。

e.g。可能有些步骤需要可靠且可靠。可恢复的(因此需要某种持久性),有时则不需要。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

很抱歉复活旧帖子,但也许它可以帮助其他人阅读...我认为FFMQ是轻量级消息传递框架的理想选择。

更新:但是我不确定它是否支持重新传递延迟(死信队列问题)。我发现即使对于轻量级提供商也是如此。但我想可以使用MessageSelector查询和消息属性的组合。

答案 4 :(得分:0)

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