首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RabbitMQ:更改优先级的优先级队列

RabbitMQ:更改优先级的优先级队列
EN

Stack Overflow用户
提问于 2019-05-26 16:53:16
回答 1查看 246关注 0票数 2

我想要实现一个优先级工作队列,其中一组消息的优先级一旦在队列中就会改变。由于它是一个具有可变处理时间的工作队列,所以不使用循环算法分配消息,而是在资源空闲时(使用每个用户限制)从队列中提取消息。

我想出了两个实施方案:

  1. 使用来自RabbitMQ的优先级队列,当出现优先级更改请求时,从队列中读取具有此优先级的消息,并以不同的优先级重新发送消息。(考虑到O(n)的复杂性,我不确定这是一个好方法。)
  2. 对每一组消息使用多个具有不同名称的队列,并使用单独的队列将当前优先级列表(队列名称的顺序列表)传递给工作人员。(使用这种方法,我不知道如何使优先级列表“持久”,以便新加入的员工知道当前的优先级列表是什么。)

你将如何实现它?对于这个用例,RabbitMQ可行吗?

EN

回答 1

Stack Overflow用户

发布于 2022-11-30 15:00:03

如果使用rabbitmq,则无法实现“消息的优先级一旦在队列中更改”的想法,因为rabbitmq只允许您从队列的头部获取消息。

例如:

  • 您有N个队列用于不同的优先级
  • 每个队列都有100+消息
  • 您的想法要求您深入队列的中间以获得特定的消息,但是这在rabbitmq中是不可能的,因此思想实验就在这里停止了,因为您只能在队列的顶部获取消息。

你的想法,国际海事组织将需要使用其他东西,除了狂犬病。

一个快速而肮脏的想法,现在将适用于rabbitmq,并且类似于您的想法:

  • 创建一个具有N个优先级的rabbitmq队列
  • 提交具有优先级x的消息
  • 如果您需要将优先级更改为更高的优先级,比如优先级y,那么您可以再次发送相同的消息,但是使用新的更高优先级的y
  • 这将确保新消息处理得更快。
  • 副作用是您可以处理相同的请求两次。
    • 您可以通过拥有一个用于同步的数据库来跟踪哪些作业已经完成,从而可以修复设计中的副作用,这样可以避免两次处理该作业。
    • 还有许多其他的细节需要解决,比如将原始消息保存在rabbitmq之外,并发性等等,
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56315572

复制
相关文章

相似问题

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