总线和REST服务具有快速响应解耦?

时间:2012-02-28 14:48:09

标签: java java-ee architecture soa decoupling

有几个后端模块暴露REST API,其中一个模块需要通过其API调用其他模块并立即响应。

解决方案是直接从此“顶层”模块调用REST API。问题是它创建了耦合,本身不支持缩放或故障转移。

一种总线(JMS,ESB)允许通过避免模块已知的端点来解耦模块。他们只与公交车“交谈”。

您将使用什么来通过总线实现快速响应(另一个限制是您没有组播,因为它可以在云中部署)?

还是依赖REST api还是JMS监听器会更好? 我想到了JMS,Camel,ESB。你知道使用这种架构的公司吗?

ps:例如,模块可能是在tomcat实例上运行的java war。

1 个答案:

答案 0 :(得分:3)

如果你的顶层模块“知道”调用其他模块,那么是的,你有一个耦合,这可能是不可取的。如果您的顶层模块通过链接,表单和/或中间模块响应的重定向定向到其他模块,那么您将获得与JMS解决方案相同的耦合量。

需要可扩展性和故障转移(而不是之前)时,请添加缓存反向代理,例如F5Varnish。这比任何基于JMS的解决方案都更具可扩展性和弹性。

<强> UDPATE

在您想要聚合和/或转换其他模块的响应的情况下,您只需创建一个composed service。顶层模块调用中间模块,该模块对后端模块进行一次或多次调用,组成结果并发送相应的响应。与定制的基于JMS的解决方案相比,在每一跳之间使用HTTP缓存(即Top - &gt; Varnish - &gt; Middle - &gt; Varnish - &gt; Backend)是一种更容易,更有效的缓存数据的方法。 / p>