使用ActiveJob AsyncAdapter列出排队任务

问题描述 投票:4回答:1

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

ruby-on-rails queue ruby-on-rails-5 rails-activejob
1个回答
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

虽然我没有测试它,所以一定要仔细检查拼写错误。

© www.soinside.com 2019 - 2024. All rights reserved.