【问题标题】:Sidekiq work conditionsSidekiq 工作条件
【发布时间】:2015-04-15 05:53:39
【问题描述】:

在我的应用程序中,我有 25 个工作人员,它们被不同用户的操作随机使用。

每个用户只允许同时进行一项(活动/忙碌)工作。

它不能在控制器上被阻止,因为这个想法不是阻止动作创建。需要创建操作,但要保持一致,直到同一用户的所有 previos 请求都得到处理,然后才会为同一用户(重新)分配工作人员。

如果其他用户同时请求创建工作,如果剩余 24 名工作人员中至少有一名可用,则应立即启动。

有没有办法查找队列行并使用它的参数来构建处理条件?

谢谢

【问题讨论】:

    标签: ruby-on-rails-4 redis sidekiq


    【解决方案1】:

    您可以使用 Sidekiq Unique Jobs

    使用这种方法,只有 1 个具有相同参数的作业会同时出现。

    所以创建模型

    class UserJobs
      belongs_to :user
    end
    
    class User
      has_many :user_jobs
    end
    
    class Worker
      sidekiq_options unique: true
    
      def perform params
        user = User.find(params[:id])
        user.user_jobs.order('id asc').each do |job|
          job.worker_class.constantize.new.perform(job.params)
          job.destroy
        end
      end
    end
    

    当您需要为用户运行任何作业时:

    user.user_jobs.create worker_class: Klass, params: params
    Worker.perform_async(user_id: user.id)
    

    【讨论】:

      猜你喜欢
      • 2017-02-11
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多