Ограничить количество фоновых рабочих на пользователя в Rails - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть приложение Rails, где у каждого пользователя есть определенное количество фоновых рабочих.

Поскольку пользователи платят больше, чтобы увеличить количество доступных работников, я хочу иметь возможность динамически добавлять этих работников.

Я хотел бы использовать ActiveJob в сочетании с Sidekiq, и я подумал о следующем решении:

  • когда пользователь регистрируется, я создаю новую очередь в sidekiq с id пользователя.
  • Я добавляю количество работников, выделенных для этой конкретной очереди, в зависимости от того, сколько пользователь платит.

У меня проблемы с реализацией этого решения с помощью Sidekiq, и я не смог найти документацию о том, как динамически добавлять очереди и рабочих.

1 Ответ

0 голосов
/ 12 ноября 2018

Если бы я сделал это, вот что я бы попробовал сначала:

  • Оберните все ограниченные задания в счетчик.
  • при запуске / удалении задания проверяет, есть ли у этого пользователя возможность его запустить.
  • Если да, работа выполняется. Если нет, то он перенесет себя.

Что-то вроде этого:

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
...