【问题标题】:how to implement asynchronous communcation architecture using ESB and MQ如何使用 ESB 和 MQ 实现异步通信架构
【发布时间】:2016-12-09 23:04:39
【问题描述】:

我们需要设计和实现异步 Web 服务。这里的异步 Web 服务通信意味着客户端发出请求并且他不等待服务的响应。虽然,它可以使用 AJAX 或其他形式来实现,但这不是我们的要求。

我希望使用消息队列和 JMS 来实现它(需要从请求队列中读取消息并将消息发布到响应队列)。

请求:客户端->消息队列->Web服务 响应:webservice ->Message Que->Client

在这里,我们还尝试利用 Enterprise Service Bus 进行负载平衡或任何其他产品。

它是正确的实施方式还是任何其他实施方式。谢谢

【问题讨论】:

    标签: java web-services jms esb


    【解决方案1】:

    您可以实现一个服务,客户端可以与它进行异步通信,并提供一个回调地址,该服务可以向其发送响应消息。要使这种通信模式有效工作,您需要在请求和响应之间建立适当的消息关联机制。

    这可以通过 SOAP Webservice 简单地实现。

    1. 客户端发送具有唯一请求 ID 和回调地址的请求 给服务提供商。

    2. 服务提供者收到请求并立即确认 客户。当响应准备好时,它会在回调地址上调用客户端。

    3. 服务提供者可以实现队列服务多个 请求/客户。

    这里的复杂性是您需要管理队列和相关逻辑。

    大多数 ESB 支持异步通信模式,您可以使用FUSE ESB 来查看它是如何实现的

    【讨论】:

    • 谢谢@ravthiru。这里第 3 点讲的是问题,你的意思是中间服务器上的消息问题吗?此外,我的要求是客户在提出请求后可能不会停留在同一页面上并且不会等待响应。他可能稍后会回来。但是随着你的方法它的回调。有用吗?
    • 如果你使用像 ESB 这样的中间件,那么它应该处理请求队列。
    • 客户端应实现响应处理程序来处理通过回调 uRL 接收到的服务器响应。
    • 你可以在这里实现简单的异步调用模型cxf.apache.org/docs/developing-a-consumer.html
    • 再次感谢@ravthiru 提供链接。它提出了两种异步方法 1) 轮询方法 2) 回调方法。我认为这些方法在客户端的同一会话中等待响应时很有用。一旦客户端断开连接,我认为不会收到响应。
    猜你喜欢
    • 2020-03-24
    • 2020-10-17
    • 2017-02-24
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 2020-12-27
    • 2011-04-17
    • 1970-01-01
    相关资源
    最近更新 更多