小编use*_*172的帖子

长时间运行的带有队列的REST API

我们正在实现一个REST API,它将启动多个长时间运行的后端任务.我一直在阅读RESTful Web Services Cookbook,建议使用指向正在处理的任务的Content-Location标头返回HTTP 202/Accepted.(例如http://www.example.org/orders/tasks/1234),让客户端轮询此URI以获取有关长时间运行任务的更新.

我们的想法是让REST API立即将消息发布到队列,后台工作者角色从队列中获取消息并使用队列启动多个后端任务.我用这种方法看到的问题是如何为任务分配一个唯一的ID,然后让客户端通过向Content-Location URI发出GET来请求任务的状态.

如果REST API立即发布到队列,那么它可以生成GUID并将其作为添加到队列的消息的属性附加,但是获取请求的状态变得很尴尬.

另一个选择是让REST API立即向数据库添加一个条目(假设一个订单,带有一个新的订单ID),具有初始状态,然后在队列中放入一条消息以启动后台任务,然后将更新该数据库记录.API将在Content-Location标头的URI中返回此新订单ID,以供客户端在检查任务状态时使用.

以某种方式首先添加数据库条目,然后将消息添加到队列似乎是向后的,但仅将请求添加到队列使得难以跟踪进度.

推荐的方法是什么?

非常感谢您的见解.

rest asynchronous message-queue long-running-processes

54
推荐指数
1
解决办法
3万
查看次数