使用ActiveJob AsyncAdapter列出排队任务

时间:2016-10-13 22:49:16

标签: ruby-on-rails queue ruby-on-rails-5 rails-activejob

有没有办法可以看到有多少人(甚至可以检查每个工作?)队列中还有剩余的工作?

1 个答案:

答案 0 :(得分:3)

在进入source code之后,我发现了这一点:

ActiveJob::QueueAdapters::AsyncAdapter使用Concurrent Ruby线程池来安排和执行作业。

在配置中初始化适配器时,会传递 执行程序选项 ,而后者恰好是initialize方法的参数 Concurrent::ThreadPoolExecutor上课。

Concurrent::ThreadPoolExecutor类的创建实例具有以下方法:

那就是说,我认为沿着这些方向应该为你做点什么:

ActiveJob::Base
  .queue_adapter
  .instance_variable_get(:@scheduler)
  .instance_variable_get(:@async_executor)
  .public_send(:queue_length)

以上内容如下:

  1. 获取适配器
  2. 获取其instance_variable @scheduler,指向
  3. Concurrent::ThreadPoolExecutor的实例(Scheduler类的实例变量 - @async_executor
  4. 您可以在其上实际调用上述方法(queue_lengthscheduled_task_countothers
  5. 虽然我没有测试过,但请务必仔细检查拼写错误。