何时使用JMS以及何时使用REST?

时间:2012-03-08 19:17:09

标签: rest asynchronous jms integration synchronous

除了特定问题的异步/同步特性,并考虑到MOM(在这种情况下选择了JMS)提供免费的额外功能,如负载平衡和其他功能,在选择JMS而不是REST时还可以考虑其他什么?反之亦然?

由于

2 个答案:

答案 0 :(得分:47)

始终使用REST。它是当今最先进,最先进,可扩展的集成方法。只需使用硬件或软件HTTP负载平衡器即可实现基于REST的服务的负载平衡,并且可以像JMS中的负载平衡一样免费。

妈妈(Message Oriented Middleware)不容易扩展(但可能会扩展到足以满足您的需求)。 REST可以在Web范围内工作。

MOM没有economies of scale。对于数据检索请求,每次请求特定数据时,必须将另一个消息发送到服务器并由服务器响应。在基于REST的系统中,HTTP cache可以为相同数据提供服务。这意味着随着请求量的增加,基于MOM的系统将看到服务器负载以与请求相同的速率增加。基于REST的系统将看到服务器负载增长的速度低于请求。

妈妈会用保证传递的点火信息诱惑你,只会用chain of custody problem咬你。

MOM对于同步请求 - 回复非常糟糕,因为它会在服务器关闭时缓慢失败(即等待超时)。当请求失败时,您希望它快速失败。如果服务器关闭,对基于REST的服务的HTTP请求将立即失败(在TCP连接上)。

MOM对于异步请求 - 回复消息传递非常有用,但是您将面临在请求和回复之间存储状态的问题(提示:您的选项为File or Regular DatabaseMessageNoSQL Database)。通常额外的实施工作不值得异步性的感知优势。如果您确实需要,基于REST的服务也会支持异步请求。 202 Accepted在这种情况下是你的朋友。

最后,使用缓存允许基于REST的系统实现基于拉的集成,这种集成更容易支持。例如,假设我们想要将数据从系统A移动到系统B.MOM方法是将消息从A发送到B.基于REST的方法是在A中创建数据馈送服务(如RSS提要) B轮询新数据(与RSS阅读器轮询新文章的方式相同)。当B失败时,在MOM示例中,支持团队将需要监视消息队列以确保它们不会溢出,而其他人则让B重新启动。在REST示例中,支持团队只需要担心让B备份。当A失败时,没有多大区别。在MOM示例中,B并不知道也不关心。在REST示例中,B确实知道A已关闭,但它仍然不关心,因为很明显,当A关闭时没有来自A的新数据。最初,基于拉取的集成的轮询要求接缝非常低效,但是HTTP缓存使得这不是问题。

换句话说,不要投资JMS服务器,而是投资一个好的缓存HTTP负载均衡器。

答案 1 :(得分:20)

您无法比较这两种技术。

REST 是一种服务/模式,可为您提供访问无状态资源的有条理方式。

MOM Systems / JMS 是一种在系统之间共享消息的模式。它关于数据,以可靠的方式输出数据。


您无法将JMS与REST进行比较,因为它们可以解决不同的问题。


但是,如果您的问题更多,那么我需要一个用于JMS队列的REST接口吗?在所有情况下,我看到人们使用REST来保护瘦客户端免受逻辑错误的影响,以便在JMS中对消息进行排队。例如。如果你有一个想要与JMS交谈的Android客户端,那么将它推到一个“休息”界面,然后可以转换并推送到JMS,就更难以做到这一点。