代码之家  ›  专栏  ›  技术社区  ›  coorasse

限制Rails中每个用户的后台工作者的数量

  •  0
  • coorasse  · 技术社区  · 6 年前

    我有一个Rails应用程序,其中每个用户都有特定数量的后台工作人员。

    我想用 ActiveJob Sidekiq

    • 当用户注册时,我使用 id
    • 我添加一些工人,专用于特定队列,这取决于用户支付的金额。

    我在用Sidekiq实现这个解决方案时遇到了一些问题,而且我找不到关于如何动态添加队列和工作线程的文档。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Sergio Tulentsev    6 年前

    • 把所有有限的工作包在柜台里。
    • 启动/出列时作业检查此用户是否有能力运行它。

    大致如下:

    class MyWorker
      def perform(user_id, *args)
        user = User.find(user_id)
        unless user.has_available_workers
          # re-enqueue with the same args. Possibly, with a delay.
          return 
        end
    
        user.checkout_worker
        # do work
      ensure
        user.release_worker
      end
    end