我需要确保每个user_id不超过一个作业同时由25名工作人员工作以避免死锁。
我已尝试过sidekiq独特的工作但死锁仍在继续,因为它一直试图处理队列中的所有待处理作业而不在params上查找user_id。
谢谢
类MyWork
包括Sidekiq ::工作人员 sidekiq_options:queue => " critical",unique:true, unique_args: - >(args){[args.user_id]}def perform(work_params)
答案 0 :(得分:2)
sidekiq_option args
是一个阵列,您的works_params
位于第一个位置。然后你应该这样做:
class MyWork
include Sidekiq::Worker
sidekiq_options :queue => "critical", unique: until_executed,
unique_args: ->(args) { [ args.first.user_id ] }
def perform(work_params)
请注意,unique: true
已弃用,因此您应使用unique: until_executed
或最适合您的工作人员的任何内容。有关其他选项,请参阅here。