我有一个ActiveRecord after_commit
钩子,该钩子调用Sidekiq作业,该作业负责确保刷新实例化视图。
如果Sidekiq作业当前正在运行,我仍要排队其他作业。但是,如果在Sidekiq作业当前正在运行时有几个作业进入队列,则只有一个作业是“有用的”,而其他所有作业将被浪费在物化视图更新中。
查看sidekiq-unique-jobs documentation for Locks时,我不确定哪种策略(如果有)适合我的用例。
我倾向于:
sidekiq_options lock: : until_executing, on_conflict: :reject
在我看来,这是说一旦排队的任何作业都称为job1
,其他尝试排队直到job1
开始执行的作业将被拒绝(例如job2
,job3
和job4
尝试排队,但被拒绝并放入“已死”。 job1
开始执行后,任何作业都可能再次被排队,一旦命名为job5
,就将再次拒绝任何其他作业,直到job5
开始执行;等等。
这与他人在sidekiq-unique-jobs
上的经历一致吗?