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

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

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

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

有帮助吗?

解决方案

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

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

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

顺便提一下,如果您不确定哪些步骤可能需要持久性/可靠性或对多个JVM进行负载平衡,那么另一个选择是完全隐藏中间件的使用,这样你就可以在内存中将SEDA队列与执行程序切换到JMS / ActiveMQ,并在需要时进行。

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

其他提示

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top