我正在阅读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客户端,我将不胜感激。
谢谢!
答案 0 :(得分:2)
在该博客文章中,假设响应通过一些带外机制返回给用户 - 例如,向客户发送电子邮件,告诉他们他们的工作已完成。
MQ Light的请求/回复目前仅限于为每个请求/回复流使用唯一的订阅主题模式。这可以通过在请求消息中添加唯一标识符作为属性,创建对包含标识符的主题模式的(可能是持久的)订阅,并让工作进程将其回复发送到相同的主题字符串。 MQ Light当前不会通过相关ID等属性提供消息选择。
回到关于对网页进行请求/回复的问题,这不是一个特定于MQ Light的问题。通常,您不希望等待来自处理请求的应用程序的同步响应的servlet线程。在应用了维护之后,所有应用程序都可以处理许多其他请求,甚至暂时关闭。因此,为什么我们倾向于谈论同步请求,然后是带外答复。
您可以实施一个系统,将响应发送回浏览器而不是电子邮件/短信。然而,您可能想要做的是从浏览器提交请求,在请求发送后立即返回,然后发出后续AJAX后台请求以定期检查持久订阅的响应。例如:
虽然上述理论上可行,但它并不能很好地扩展,你可能最好用AJAX HTTP调用替换步骤3,以便在作业完成时MQ Light工作进程更新。这样可以更好地扩展。