W A*_*jum 6 message-queue rabbitmq task-queue celery
我有一个应用程序可以同时从多个用户接收三种类型的消息,我正在使用 3 个队列/消费者和 3 个交换器处理它。我的问题是,当队列中有来自一个用户的数千条消息时,其他用户正在等待。
我正在寻找一种解决方案来并行执行每个用户的作业。我可以为每个用户动态创建队列,但这不是一个好的解决方案,因为会有数百个队列和使用者。如何自动删除空闲的消费者/队列。我可以以任何方式使用 celery 和 redis 来解决这个问题吗?
在 RabbitMQ 中使用多个队列并不是一个好主意。队列是 RabbitMQ 服务器上的单线程。
您的问题是“一个用户的数千条消息会阻止其他用户”,我认为解决方案是使用Priority Queue。
每个用户都有一个计数器来记录一段时间内发送了多少条消息,如果这个值很大,则该用户发布的消息的优先级较低。因此,如果有很多消息在队列中等待,来自其他用户的消息将首先发送到您的消费者作业。在这种情况下,您应该在消费者的通道上设置适当的“预取”。