首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过JMS或JavaSpaces分发多阶段任务的优缺点是什么?

通过JMS或JavaSpaces分发多阶段任务的优缺点是什么?
EN

Stack Overflow用户
提问于 2008-09-24 14:49:51
回答 3查看 3.6K关注 0票数 1

当试图分发需要多阶段处理流水线的工作时,JMS与JavaSpaces在通信、同步和吞吐量成本方面的限制是什么?

EN

回答 3

Stack Overflow用户

发布于 2008-09-29 09:52:03

如果您想要SEDA,从一个阶段发送消息到另一个阶段,那么JMS实现通常要快得多,并且更具可伸缩性,因为MOM被设计为不需要锁,因此它们可以是高度异步和并发的。使用JMS,您可以在启动时设置使用者,并且message broker通常会尽快将消息推送到您的应用程序,以便在您的应用程序可以处理它们时,随时可以处理许多内存中的对象-避免任何网络往返或锁定等。例如,请参阅how prefetch works with ActiveMQ

使用JavaSpaces进行消息传递往往效率较低,因为它们通常是使用一种更以数据库为中心的方法来实现的,这种方法使用带有读/写条目的锁等。因此,您倾向于查询对象,然后使用JavaSpaces处理它们,这往往更容易聊天,而且消息传递效率较低。

不过,如果您想要共享状态,则JavaSpaces方法的最大优势在于;您可以将JavaSpace用作某种数据库。虽然如果您真的需要数据库,您可以使用带有JMS的关系数据库;但是JavaSpace人员喜欢使用单个系统来实现共享状态和消息传递。

FWIW通常没有中间件;有时在内存中SEDA就是您所需要的全部,有时是JMS,有时是关系数据库,有时是目录中的文件。这完全取决于您的需求、可伸缩性、吞吐量、可靠性等等。我倾向于向人们推荐hide middleware APIs from their code so that they can switch to whatever middleware they want easily via a simple one line config change such as with using Apache Camel

票数 2
EN

Stack Overflow用户

发布于 2008-09-24 17:27:08

JMS是API,而不是产品。它不能有任何“通信、同步和吞吐量成本”。JMS的具体实现(Weblogic、JBoss、Tibco等)能。

JMS中没有同步函数,顺便说一下-- queue is queue,您不能让一条消息(在一个队列中)等待另一条消息(在另一个队列中)。

票数 1
EN

Stack Overflow用户

发布于 2009-02-02 18:07:18

要考虑的另一点是,JMS队列不提供基于大小的阻塞能力,因此纯SEDA实现很难使用纯JMS队列,因为它依赖于队列“填满”并在上游阶段施加反向压力。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/127629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档