繁体   English   中英

Terracotta是否使JMS成为不需要的层?

[英]Does Terracotta make JMS an unneeded layer?

我们目前正在编写一个IT已经为其购买硬件的应用程序。 他们的方法是购买我们将部署的大型硬件。 为了增加更多处理,他们计划添加具有相同软件的其他服务器。 为了适应这种设计,我们使用Terracotta来提供运行多个JVM的能力,就像它是一个大型JVM一样。 无论这是否是一种明智的方式(我仍然不相信),这就是我正在处理的情况。

无论如何,我们有一部分应用程序使用标准的生产者/消费者类型队列。 使用Terracotta,我们可以创建一个可与多个JVM一起使用的单个队列。 这很漂亮,效果很好。

但现在,我们正在寻找额外的机会来运行异步流程。 为了使我们的所有排队逻辑更加一致,我们正在考虑使用JMS来抽象出通用逻辑。 由于我们不打算将JMS用作远程队列(至少在可预见的未来),我想知道JMS是否只是增加了不必要的复杂性。

有什么建议或想法? 我们应该继续将队列构建为并发结构,还是将它们视为单独的可能远程对象?

消息队列本质上只是具有一些奇特选项的队列数据结构。 如果您的项目与大多数其他项目一样,那么您不会使用任何使JMS与任何旧Queue实现不同的JMS功能,尤其是因为Terracotta正在处理持久性和分发。

所以JMS可能只是增加了应用程序的复杂性,这是JMS非常擅长的。 像所有不需要的复杂驱动程序一样,摆脱它。 如果您出于一个或多个原因决定使用JMS,那么请执行此操作。

我的一位同事一直在使用Mule ,它允许您定义可能是JVM内部或JVM间队列的队列。

我同意krosenwald :目前尚不清楚JMS会在你的情况下添加什么,除非有一个总体计划要么离开兵马俑(或者至少可以选择)。

我没有使用过Terracotta,但我们使用的是与它非常相似的分布式缓存产品。 我们的架构听起来与您的架构相似。 生产者和消费者都坐在同一个缓存中并使用缓存子系统共享数据。

虽然我同意校长认为现在添加JMS对您来说可能是一种不必要的复杂性,但我们发现,虽然光滑,但分布式缓存并不是消息传递机制的最佳实现。 虽然可以创建相同的sematics,但是一些小的细节会导致问题(例如,消费者的负载平衡,这可能需要与分布式缓存进行额外的同步,但是与JMS自然地协同工作。)

如果您认为未来的用例需要更多pub-sub语义和持久性等,那么您可能需要开始考虑JMS。 另外,考虑分离关注点。 您正在使用Terracotta来分发数据(这是它的目的)。 您是否也会使用它来分发控制指令(这可以通过消息语义更好地完成)?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM