rabbitmq 管理队列中尚未处理的任务的ID

56lgkhnf  于 2023-01-26  发布在  RabbitMQ
关注(0)|答案(1)|浏览(148)

我正在寻找教程/文章,解释如何维护尚未处理的队列中的项目的ID。
我正在寻找一些教程,以获得更多的观点,并接触到更多的想法,因为我们知道,没有一个解决方案的适合所有。
我一直在谷歌上寻找,但我可能是打错了字,因为我没有找到任何文章谈论这一点。
我想找的描述是这样的。
用户单击按钮,它会将一些有效负载发送到队列,但需要几秒钟/几分钟的时间来处理。
所以我们有两个选择。
首先,给用户一个ID,但是我们都知道用户会一直按F5键来查看状态是否发生了变化。
第二,不要给用户一个数字来查看状态,用户很可能会重复这个过程,并打开新的任务(因为如果用户没有得到反馈,很可能会被视为错误)。
我对第一个选择感兴趣。
管理此ID的不同策略。
我应该把它保存在像redis这样的数据库中,还是关系数据库中?
是否可以或建议直接查询队列?
它是否可以横向扩展?
如果只有在处理任务时才生成ID,我是预先创建ID以插入任务中,还是为不同的步骤保留许多ID?
此ID是否由我无法控制的第三方API生成?
我知道这类问题已经被比我聪明的人解决了,所以我不想再重复一遍。
谢谢。

9njqaruj

9njqaruj1#

我建议采取分两个阶段的办法:
1.让您的客户随时了解其查询的最新状态。请阅读此page中的 * 异步操作 * 部分。
有时,POST、PUT、PATCH或DELETE操作可能需要一段时间才能完成处理。如果在向客户机发送响应之前等待完成,则可能会导致不可接受的等待时间。如果是这样,请考虑使操作异步。返回HTTP状态代码202(已接受)以指示已接受请求进行处理,但尚未完成。
应该公开一个返回异步请求状态的终结点,以便客户端可以通过轮询状态终结点来监视状态。在202响应的Location标头中包含状态终结点的URI。
1.当进程完成时,从队列中删除您的消息。
在阅读消息时,您可以使用UUID动态生成ID来标识您的负载。该ID将影响到负载中的预定义字段。我猜队列中的消息有足够的信息来处理它。由于您的处理尚未完成,因此您应该将消息保留在队列中,并在处理完成后删除它。

相关问题