2015-11-05 15 views
1

我正在阅读MQlight的工作者卸载模式的教程。这适用于我正在开发的解决方案。通知MQ Light流程完成到Web浏览器的最佳实践是什么?

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

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

我想知道Bluemix MQLight服务(该服务对Web客户端不可见)有何可能的解决方案。我正在考虑利用socket.io(或简单的websocket)来处理完整的消​​息。但是这个解决方案在工作进程之间共享Web客户端信息时遇到问题我很感激你是否可以分享一些最佳的流程完成消息通知给Web客户端。

谢谢!

+0

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

回答

2

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

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

回到您关于做网页请求/回复的问题,这不是真正的MQ Light特定问题。通常情况下,您不希望等待来自处理请求的应用程序的同步响应。毕竟应用程序可以处理许多其他请求,甚至在应用维护时暂时关闭。因此,为什么我们倾向于谈论同步请求,然后是带外回复。

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

  1. 当用户提交的HTTP Web请求,通过创建一个持久MQ轻订阅启动(以确保响应不丢失,如果它的请求后,立即发回),与具有主题串此请求唯一的标识符
  2. 然后发布包含请求的MQ Light消息,并使用包含相同标识符的消息属性。然后将HTTP响应返回给浏览器。
  3. 有一个AJAX HTTP调用周期性地向另一个servlet发出请求,这个servlet继续恢复持久订阅,等待响应消息一小段时间,然后返回AJAX HTTP响应中的消息内容(如果有的话) 。

虽然上述理论上可行,但它不能很好地扩展,您可能会更好地将AJAX HTTP调用替换为MQ Light工作进程在作业完成时更新的数据库。这比例好得多。

+0

谢谢你的回答。 – ibmamnt