gpt4 book ai didi

grails - 在Web应用程序中使用RabbitMQ,多个线程可以在同一队列上工作

转载 作者:行者123 更新时间:2023-12-02 14:51:35 27 4
gpt4 key购买 nike

我有一个Web应用程序,用户可以在其中上传由Web应用程序处理的文件。我要做的第一件事是将请求放入RabbitMQ队列。然后,这些请求以队列方式在后台一对一地处理。所有这些都很好。

从我的分析中,我注意到当队列中的请求之一需要很长时间来处理时,就会出现问题。发生这种情况时,长时间运行的请求后面的请求也会延迟。

示例

User 1 uploads DOC file   at 12:32:10*
User 2 uploads DOCX file at 12:32:11*
User 3 uploads PDF file at 12:32:12*
User 1 uploads PPT file at 12:32:13*
* -数据库中反射(reflect)日期然后创建请求的日期时间戳

此时,队列将如下所示并按以下顺序进行:
DOC, DOCX, PDF, PPT

我知道 PDF文件需要更长的处理时间,但是 PPT不需要很长时间。由于 PDFPPT之前处理,因此 PPT也需要很长时间才能完成。

在处理完所有请求之后,数据库中的时间戳如下所示:
User 1 uploads DOC file   at 12:32:10*     12:32:11**
User 2 uploads DOCX file at 12:32:11* 12:32:12**
User 3 uploads PDF file at 12:32:12* 12:32:20**
User 1 uploads PPT file at 12:32:13* 12:32:40**
** -数据库中的日期时间戳,反射(reflect)出请求已完成

请注意,由于PPT位于 27后面,因此它需要 PDF秒才能完成。在我的测试中,如果它在 PDF之前,那么只需要 2 to 3

PS:我在grails应用程序中使用RabbitMQ插件

问题

有没有办法让多个线程处理Web应用程序中队列中的请求?我在想,如果多个线程正在队列中工作,那么即使一个请求(以上示例中的PDF)需要更长的时间来处理其他请求,还是可以完成(以上示例中的PPT)?如果是这样,如何强制多个线程在队列上工作?

我是否应该使用更好的体系结构,以便更快地处理请求,而不是等待需要很长时间才能处理的请求?

最佳答案

也许您想要的是将一个以上的消费者附加到队列中。因此,当一个使用者处理PDF时,另一个使用者可以处理下一个文件。

在您的情况下,您可能还希望basic_qos的值也较低。看一下本教程:http://www.rabbitmq.com/tutorials/tutorial-two-java.html

这种模式在这里称为competing consumers:http://www.eaipatterns.com/CompetingConsumers.html

关于grails - 在Web应用程序中使用RabbitMQ,多个线程可以在同一队列上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26236483/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com