【问题标题】:Sidekiq - how to execute the job immediately (+ does make sense to use a queue in this case)?Sidekiq - 如何立即执行作业(+ 在这种情况下使用队列确实有意义)?
【发布时间】:2016-05-08 14:04:39
【问题描述】:

我有一个任务需要在创建请求后立即生成并尽快完成。

为此,我创建了一个/config/sidekiq.yml 文件,并在其中定义了这个:

---
:queues:
  - default
  - [critical, 10]

对于相应的工人,我设置了这个:

class GeneratePDFWorker
  include Sidekiq::Worker
  sidekiq_options queue: 'critical', retry: false

  def perform(order_id)
    ...

然后,当我调用这个工人时:

GeneratePDFWorker.perform_async(@order.id)

所以我正在测试这个。但是——我找到了this post,据说如果我想立即执行任务,我应该调用:

GeneratePDFWorker.new.perform(@order.id)

所以我的问题是 - 我应该使用 (critical) 队列 + new (GeneratePDFWorker.new.perform) 方法的组合吗?有意义吗?

另外,我如何验证任务是否以critical 执行?

谢谢

【问题讨论】:

  • 如果你只是在测试一个工人 .. 我认为在你的 rails 控制台上运行 GeneratePDFWorker.perform(@order.id) 应该可以完成这项工作.. 在你正在测试的机器上运行你的 sidekiq 守护进程

标签: ruby-on-rails ruby priority-queue sidekiq


【解决方案1】:

所以我的问题是 - 我应该使用(关键)队列 + 新 (GeneratePDFWorker.new.perform) 方法的组合吗?有意义吗?

使用GeneratePDFWorker.new.perform 将在此处运行代码,然后像正常一样运行内联代码(以阻塞方式,而不是异步)。你不能定义一个队列,因为它没有被排队。

【讨论】:

  • 正确,它不会在后台运行,它会在调用GeneratePDFWorker.new.perform的同一线程(即ruby进程)中运行,这确实违背了使用Sidekiq的全部目的。 .
【解决方案2】:

正如Walking Wiki 提到的,GeneratePDFWorker.new.perform(@order.id) 将同步调用worker。因此,如果您通过控制器操作执行此操作,则请求将阻塞,直到 perform 方法完成。

我认为您通过 Sidekiq 将优先级队列用于关键任务的方法是可行的方法。只要您有足够的 Sidekiq 工作人员,并且您的队列没有积压,该任务应该几乎立即运行,因此在进程内运行工作人员的好处几乎为零。所以我会说是的,在这种情况下排队确实有意义。

此外,您可能已经意识到这一点,但 sidekiq 有一个很棒的监控 UI:https://github.com/mperham/sidekiq/wiki/Monitoring。这应该可以让您轻松获得有关员工绩效的可靠、详细的指标。

【讨论】:

    【解决方案3】:

    我应该使用(关键)队列的组合吗?

    我:

    是的,如果您愿意,可以使用critical queue。权重为 2 的队列的检查频率是权重为 1 的队列的两倍。

    提示:

    • 尽可能减少队列数量。 Sidekiq 并非旨在处理大量 queues。
    • 还要使weights 尽可能简单。如果您希望队列始终按特定顺序处理,只需按顺序声明它们,不带权重。

    新的 (GeneratePDFWorker.new.perform) 方法?

    我:不,首先在同一个线程中使用sidekiq asynchronously 是不好的。这将妨碍您的应用程序的性能,因为您的application-server 将忙碌更长时间。这对你来说将是非常昂贵的。那么使用sidekiq又有什么意义呢?

    【讨论】:

      猜你喜欢
      • 2013-10-15
      • 2022-12-04
      • 1970-01-01
      • 2016-07-27
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多