我想实现一个优先级工作队列,其中一组消息的优先级可以在它们进入队列后更改。由于这是一个处理时间可变的工作队列,因此不使用循环算法分配消息,而是在资源空闲时从队列中提取消息(使用每个使用者限制)。
我提出了两个实施想法:
1.使用RabbitMQ中的priority queue,当请求更改优先级时,从队列中读取具有该优先级的消息,并以不同的优先级重新发送它们。(考虑到O(n)的复杂度,我不确定这是一个好方法。
1.为每组消息使用多个具有不同名称的队列,并使用单独的队列将当前优先级列表(队列名称的有序列表)传递给工作者。(使用这种方法,我不确定如何使优先级列表“持久化”,以便新加入的工作者知道当前优先级列表是什么。)
您将如何实现它?RabbitMQ是否适合此用例?
1条答案
按热度按时间gab6jxml1#
你的想法是“一旦消息进入队列,它们的优先级就会改变”IMO在rabbitmq中是不可能的,因为rabbitmq只允许你从队列的头部获取消息。
例如:
你的想法IMO将需要使用除了rabbitmq之外的其他东西。
一个快速而肮脏的想法,将工作与rabbitmq现在,并类似于你的想法:
x
消息y