【问题标题】:How to prioritize queues using Resque and Redis如何使用 Resque 和 Redis 对队列进行优先级排序
【发布时间】:2021-02-06 17:38:30
【问题描述】:

我的应用程序有多个队列,我正在尝试确定特定队列的优先级。

resque-pool.yml

development:
  "high_priority, med_priority, low_priority": 1

根据 resque-pool 文档 (https://github.com/nevans/resque-pool) 示例:

resque-pool.yml

foo: 1
bar: 2
"foo,bar,baz": 1

production:
  "foo,bar,baz": 4

"这将启动七个工作进程,一个专门用于 foo 队列,两个专门用于 bar 队列,四个工作人员优先查看所有队列。使用上面的配置,这类似于运行以下命令:"

rake resque:work RAILS_ENV=production QUEUES=foo &
rake resque:work RAILS_ENV=production QUEUES=bar &
rake resque:work RAILS_ENV=production QUEUES=bar &
rake resque:work RAILS_ENV=production QUEUES=foo,bar,baz &
rake resque:work RAILS_ENV=production QUEUES=foo,bar,baz &
rake resque:work RAILS_ENV=production QUEUES=foo,bar,baz &
rake resque:work RAILS_ENV=production QUEUES=foo,bar,baz &

我认为队列按它们在 yaml 文件中的顺序排列优先级,但也希望对其进行验证。

如何手动验证最高优先级队列中的作业优先于 med_priority 和低优先级队列中的作业?为了正确确定它们的优先级,我是否遗漏了什么?

【问题讨论】:

    标签: ruby-on-rails ruby redis resque


    【解决方案1】:

    你说得对。正如主要的Resque documentation 所说:

    Resque 不支持数字优先级,而是使用您为其指定的队列顺序。我们将此队列列表称为“队列列表”。

    假设我们在 file_serve 队列之外添加了一个 warm_cache 队列。我们现在像这样启动一个工人:

    $ QUEUES=file_serve,warm_cache rake resque:work

    worker 寻找新工作时,首先会检查 file_serve。如果它找到工作,它会处理它,然后再次检查 file_serve。它将继续检查 file_serve 直到没有更多工作可用。此时,它将检查warm_cache。如果它找到一份工作,它会处理它,然后检查 file_serve(重复整个过程)。

    通过这种方式,您可以确定某些队列的优先级。

    请注意,在 resque-pool 设置中,生成的每个进程都将遵循其自己的优先级(因此在示例配置中,如果仅处理 @987654324 的进程,bar 作业将在 foo 作业之前得到处理@ 是空闲的,而其他人很忙)。不过,这是一项功能,而不是错误!

    至于如何测试它,只需将一堆作业排入每个队列中,然后观察它们在 resque-web(或日志)中的处理过程。

    【讨论】:

    • 谢谢!那是一个非常透彻的解释!不知道这是我可以在 resque-web 中监控的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多