首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在the应用程序中使用RabbitMQ,多个线程可以在同一个队列上工作吗?

在the应用程序中使用RabbitMQ,多个线程可以在同一个队列上工作吗?
EN

Stack Overflow用户
提问于 2014-10-07 12:52:42
回答 2查看 333关注 0票数 1

我有一个网络应用程序,用户上传文件的处理是由网络应用程序.我做的第一件事是将请求放在RabbitMQ队列中。然后,在后台以排队的方式逐个处理这些请求。所有这些都很好。

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

示例

代码语言:javascript
复制
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*

* -数据库中反映请求的日期时间戳已经创建。

此时,队列将如下所示,并按以下顺序排列:

代码语言:javascript
复制
DOC, DOCX, PDF, PPT

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

在处理所有请求之后,DB中的时间戳如下所示:

代码语言:javascript
复制
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**

** -数据库中反映请求的日期时间戳已经完成。

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

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

问题

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

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

EN

回答 2

Stack Overflow用户

发布于 2014-10-07 17:52:47

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

在您的例子中,您可能也希望basic_qos值低。看看本教程:http://www.rabbitmq.com/tutorials/tutorial-two-java.html

这个模式在这里被称为competing consumershttp://www.eaipatterns.com/CompetingConsumers.html

票数 0
EN

Stack Overflow用户

发布于 2014-10-10 21:23:12

这难道不符合使用队列的目的吗?我们有一个类似的应用程序,它使用RabbitMQ。我们所做的就是对每种类型都有不同的队列。因此,如果它的pdf,我们有一个pdf队列,一个ppt队列,一个文档队列和一个docx队列。

我们使用Java和Octobot作为客户端连接到MQ。因此,我们可以使用相同的jar,其中包含一个yml文件,其中列出了所有队列。JSON有任务名。在发送到队列中的每个json消息中都是相同的。因此,在所有情况下,同一个类都可以工作。

还有竞争的消费者。我想我们也这么做..。我们有多个运行octobot(Java)的服务器实例。因此,它们在RabbitMQ服务器上注册为消费者。因此,RabbitMQ根据接收到的最后一个ack决定哪一个是空闲的,并相应地发送消息。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26236483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档