【问题标题】:What is best practice to get notification of MQ Light process complete to web browser?将 MQ Light 流程完成通知到 Web 浏览器的最佳做法是什么?
【发布时间】:2015-11-05 02:23:07
【问题描述】:

我正在阅读 MQlight 的工人卸载模式教程。这适合我正在开发的解决方案。

https://developer.ibm.com/messaging/mq-light/docs/worker-offload-tutorial/

在本教程中,Exmple2 知道一些流程已经完成。 Example2 向 MQlight 发送消息。然后这些工作进程处理数据库查询,并更新 SNS。但是,这些处理结果不会通知给 Web 客户端。

我想知道在 Bluemix MQLight 服务的情况下可能的解决方案是什么(该服务对 Web 客户端不可见)。我正在考虑将 socket.io(或简单的 websocket)用于进程完成消息。但是这个解决方案在工作进程之间共享 Web 客户端信息方面存在问题。如果您能与网络客户端分享一些处理完整消息通知的最佳实践,我将不胜感激。

谢谢!

【问题讨论】:

  • 我只是想在回答之前理解问题。听起来您想要一个允许用户提交请求的 Web 应用程序,然后在 MQ Light worker 应用程序完成请求时显示更新?如果是这样,您可能想使用 MQ Light 实现请求/回复,并使用 ajax 或 Web 套接字之类的东西来更新页面,但我想先更好地理解这个问题。

标签: messaging ibm-cloud mq


【解决方案1】:

在该博客文章中,假设响应通过某种带外机制返回给用户 - 例如,向客户发送一封电子邮件,告诉他们他们的工作已完成。

使用 MQ Light 的请求/回复目前仅限于对每个请求/回复流使用唯一的订阅主题模式。这可以通过在请求消息中添加一个唯一标识符作为属性,创建对包含该标识符的主题模式的(可能是持久的)订阅,并让工作进程将它们的回复发送到相同的主题字符串。 MQ Light 目前不提供按相关 ID 等属性选择消息。

回到您关于对网页进行请求/回复的问题,这实际上并不是一个特定于 MQ Light 的问题。通常,您不想让 servlet 线程等待来自处理请求的应用程序的同步响应。毕竟,应用程序可能正在处理许多其他请求,甚至在应用维护时暂时停机。因此,我们倾向于谈论同步请求,然后是带外回复。

可以实现一个将响应发送回浏览器而不是电子邮件/短信的系统。但是,您可能想要做的是从浏览器提交请求,在请求发送后立即返回,然后发出后续的 AJAX 后台请求以定期检查持久订阅的响应。例如:

  1. 当用户提交 HTTP Web 请求时,首先创建一个持久的 MQ Light 订阅(以确保响应在请求后立即发回时不会丢失),主题字符串包含此请求的唯一标识符
  2. 然后发布包含请求的 MQ Light 消息,消息属性包含相同的标识符。然后向浏览器返回一个 HTTP 响应。
  3. 让 AJAX HTTP 调用定期向另一个 servlet 发出请求,该 servlet 反过来又恢复持久订阅,等待响应消息的一小段时间,并在 AJAX HTTP 响应中返回消息的内容(如果有的话) .

虽然上述方法理论上可行,但它的扩展性并不特别好,您最好将步骤 3 替换为对数据库的 AJAX HTTP 调用,当作业完成时 MQ Light 工作进程会更新该数据库。这样可以更好地扩展。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    相关资源
    最近更新 更多