问题
考虑一个支持以下操作的社交网站:
必须满足以下要求:
我的拍摄
我们可以有一个全局任务队列,上载服务可以侦听新作业。该请求可以表示为:
{
"request_id":"abcd-defg-pqrs",
"total_files": 2,
"files":[
{
"id":"bcde-efgh-qrst",
"name":"cat.jpg",
"type":"image"
},
{
"id":"cdef-fghi-rstu",
"name":"kitty.mp4",
"type":"video"
}
]
}
该请求分为单个文件上传请求,并被推送到 upload-request 消息队列:
{
"request_id":"abcd-defg-pqrs",
"total_files": 2,
"file":{
"id":"bcde-efgh-qrst",
"name":"cat.jpg",
"type":"image"
}
}
每个请求均被挑选并作为后台作业处理,然后将响应发送到 upload-response 聚合器,该聚合器将保留上传的文件总数:
{
"request_id":"abcd-defg-pqrs",
"total_files": 2,
"uploaded_files": 1,
"file":[
"bcde-efgh-qrst"
]
}
所有文件上传完毕后,最终响应将发送到 tagging-request 消息队列:
{
"request_id":"abcd-defg-pqrs",
"total_files": 2,
"files":[
"bcde-efgh-qrst",
"cdef-fghi-rstu"
]
}
完成作业的标记服务后,它将请求发送到 notification-request 消息队列。最后,一旦我们完成所有任务,就可以使用 global-response 消息队列将其通知给用户。
关注点
upload
→tag
→notify
的工作是使用消息传递队列。有没有更好的方法可以达到相同的目的?