使用 ActiveJob AsyncAdapter 列出排队的任务

ale*_*nst 6 queue ruby-on-rails rails-activejob ruby-on-rails-5

有什么方法可以让我看到队列中还有多少(甚至可能检查每个作业?)作业?

And*_*eko 6

在深入研究源代码之后,我发现:

ActiveJob::QueueAdapters::AsyncAdapter使用并发 Ruby线程池来调度和执行作业。

当您在配置中初始化适配器时,您会传递executor options,而这些选项恰好是initialize方法的 参数Concurrent::ThreadPoolExecutor类。

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

也就是说,我认为应该按照以下方式为您做一些事情:

ActiveJob::Base
  .queue_adapter
  .instance_variable_get(:@scheduler)
  .instance_variable_get(:@async_executor)
  .public_send(:queue_length)
Run Code Online (Sandbox Code Playgroud)

以上执行以下操作:

  1. 拿到你的适配器
  2. 获取它的 instance_variable @scheduler,它指向
  3. 实例Concurrent::ThreadPoolExecutorScheduler类的实例变量-@async_executor
  4. 在这你可以实际调用的方法,上述(queue_lengthscheduled_task_count其他人

虽然我没有测试它,所以一定要仔细检查错别字或其他任何东西。