【问题标题】:Is messaging a good implementation of Request/Reply消息传递是请求/回复的良好实现吗
【发布时间】:2013-02-27 06:22:52
【问题描述】:

JMS 或消息传递非常适合捆绑不同的应用程序并形成许多 ESB 和 SOA 架构的基础架构。

但是说应用程序 A 需要应用程序 B 上的服务立即响应,例如需要订单的供应详细信息或需要立即确认某些更新。从性能的角度来看,消息传递是否是正确的解决方案?通常,客户端将连接到队列上的 MoM - 然后必须空闲的侦听器将拾取消息并转发到服务器端处理器 - 它将处理响应并将其发送回队列或主题和请求客户将遵循相同的过程并拿起它。如果消息很大,MoM 也必须将其考虑在内。

让我想知道 Http 是否是访问此类解决方案而不是通过消息传递路由的更好解决方案?我已经看到很多应用程序使用 MoM(如 AMQ 或 TIBCO Rvd)来实际用于即时请求/响应 - 但这是糟糕的设计还是一些微调或设置使其与 Http 相同。

【问题讨论】:

    标签: http jms messaging tibco-rv


    【解决方案1】:

    这真的取决于您的要求。通常消息传递服务将支持以下一项或全部:

    • 保证交货
    • 事务性
    • 持久性(即消息在传递之前一直保持,即使系统在此期间出现故障)

    HTTP 连接无法 [轻松] 实现这些属性,但话又说回来,如果您不需要它们,那么我想您可以提出“simple”HTTP 会提供更简单的情况和更轻量级的解决方案。 (强调“简单”,因为一些消息传递实现将通过 HTTP 运行)。

    我认为通过消息传递实现的请求/响应本身并不是糟糕的设计。我的意思是,事情是这样的......你是否在实施这个过程的两个方面?如果没有,并且您已经建立了可以响应请求的消息传递服务,除了所有其他考虑因素之外,这似乎是要走的路......并且由于某些设计概念而绕过它以使用 HTTP 重新实现将需要一些公平在我看来,这背后有很强的推理能力。

    但反之亦然。如果您已经是 HTTP 可访问资源,并且您没有任何超级严格的要求可能会建议更强大的消息传递解决方案,那么我不会在没有保证的情况下强制使用它。

    如果您完全使用 tabula-rasa 并且必须从头开始实施双方.....那么......在这里发布另一个问题并提供一些细节! :)

    【讨论】:

    • 谢谢。非常适合新项目并希望为 JMS/HTTP 中的服务类型设置一些标准。例如订购过程——尽管它可能会在提交订单后仍然执行一系列短暂的自动化事件,我们可以触发并忘记——所以 JMS 非常适合。但是对于某些位,例如我想要服务的状态 - 目前已经通过 JMS,我们正在考虑迁移到 HTTP。 - 我承认我们还没有进行任何性能测试,但试图收集在即时响应的情况下 http 是否比 JMS 更好。更改代码很好 - 只需将连接 API 从 JMS 更改为 HTTP
    • 嗨 Nicholas - 根据我上面的评论,您能进一步评论吗?谢谢
    • 在您的 2 个示例中,它们听起来很适合每种情况。 JMS 非常擅长 Fire-n-Forget,但是对于更多类似实用程序的事情,例如状态检查,使用 HTTP 是有意义的,并且还简化了调用并扩展了潜在的客户端基础(发出 WGET 容易得多命令行上的命令,而不是发送 JMS 消息....)
    • 在客户端和服务端使用Spring,我们使用JMS进行异步和同步,这样做的好处是客户端只看到服务接口,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 2017-01-09
    相关资源
    最近更新 更多