我正在寻找解释如何维护队列中尚未处理的项的ID的教程/文章。
我正在寻找一些教程,以获得更多的观点和接触更多的想法,因为我们知道没有一个解决方案是适合所有的。
我在谷歌上查了一下,但是我可能输入了错误的单词,因为我没有找到任何关于这个的文章。
我要找的东西的描述是这样的。
用户单击一个按钮,它将一些有效负载发送到队列,但它需要一些秒/分钟来处理。
所以我们有两个选择。
首先,给用户一个ID,但我们都知道用户会一直按F5来查看状态是否发生了变化。
第二,不要给用户一个数字来查看状态,用户很可能会重复这个过程,并打开新的任务(因为如果用户没有得到反馈,它可能会被视为一个错误)。
我对第一个选项感兴趣。
管理该ID的不同策略。
我应该把它保存在像redis这样的数据库中,还是一个关系数据库中?
是否可以或建议直接查询队列?
是否可横向伸缩?
如果ID仅在处理任务时生成,我是预先创建ID以插入到任务中,还是为不同的步骤保留多个ID ?
如果这个ID是由我无法控制的第三方API生成的?
我知道这类问题已经被比我聪明的人解决了,所以我不想重新创造轮子。
谢谢。
我的建议是分两个阶段:
- 让您的客户更新他的查询状态。从本页阅读异步操作一节。
有时POST、PUT、PATCH或DELETE操作可能需要需要一段时间才能完成的处理。如果你等待完成在向客户端发送响应之前,可能会导致不可接受延迟。如果是,请考虑使操作异步化。返回HTTP状态码202(已接受)表示请求已被接受
您应该公开一个端点,该端点返回对象的状态异步请求,因此客户端可以通过轮询来监视状态状态端点。控件中包含状态端点的URI202响应的位置头。
- 在进程结束时从队列中删除消息
在读取您的消息时,您可以通过使用UUID
来识别您的有效负载来动态生成和ID。该ID将受到有效负载中预定义字段的影响。我猜你的消息队列中有足够的信息,你需要处理它。由于您的处理尚未完成,您应该将消息保留在队列中,并在处理完成后将其删除。