【问题标题】:Message queue - architecture (task + response)消息队列 - 架构(任务 + 响应)
【发布时间】:2013-12-16 19:36:30
【问题描述】:

我现在正在考虑将消息队列用于“视频”项目。

成像一个视频服务,用户上传视频然后截图,短视频缩略图和不同的视频大小由脚本制作(现在如何并不重要)。无论如何,更重要的是要考虑前端(网络上传服务器)和后端服务器(视频处理服务器)之间的通信。

所以过程可能是:

  1. 用户访问网站
  2. 用户上传新视频
  3. 上传脚本添加新消息到消息队列(嘿,有新视频,处理它)
  4. 在此状态下,用户可以在“已上传”状态的视频列表中看到该视频

这是我实际上不知道该怎么做的部分。

  1. 消费者从消息队列中获取消息并开始处理它。
  2. 消费者检测到它是视频 - 如果现在它会失败
  3. 消费者制作屏幕截图(需要很长时间),消费者会通知网络屏幕截图已制作(???如何??? - 我应该将新消息放入消息队列吗?)
  4. 消费者调整视频大小(需要很长时间) - 同样的问题 - 消费者应如何通知网站,视频大小调整完成?

所以,问题是如何处理来自后端服务器的消息。我猜消费者会将另一条消息放入某个日志队列,其他网络消费者将处理它们并更新数据库。对吗?

【问题讨论】:

    标签: rabbitmq activemq message-queue application-design web-application-design


    【解决方案1】:

    只需创建两个队列:一个用于作业,第二个用于响应。

    流程:

    • 用户 -> 工作队列 -> 工作人员
    • worker(s) -> 消息队列 -> USER

    第二个的消费者可以是任何东西 - 一个将结果写入数据库的进程,或者 - 例如 - 一个立即发送通知的 WebSocket 服务器。

    【讨论】: