Мне нужно убедиться, что не более одной работы за user_id работает одновременно одним из 25 рабочих, чтобы избежать взаимоблокировок.Уникальная обработка вакансий Sidekiq
Я пробовал уникальные задания sidekiq, но тупики продолжаются, потому что он пытается обрабатывать все ожидающие задания в очереди, не ища user_id в параметрах.
Спасибо
класс MyWork
включают Sidekiq :: Worker
sidekiq_options: очереди => "критические", уникальны: правда, unique_args: -> (арг) {[args.user_id ]}четкости выполнения (work_params)
Вот и не очень хорошая идея: возможно, вы можете поддерживать таблицу, содержащую идентификаторы пользователей, которые обрабатываются. Каждый раз, когда вы должны начать обработку, взгляните на таблицу и текущий идентификатор пользователя; начните обработку, только если идентификатор пользователя не находится в таблице. Если он находится в таблице, верните задание обратно в очередь. – bsvin33t
В конечном итоге это может быть неплохой идеей :) – ace
Вы должны попытаться использовать хранилище в памяти, предоставленное redis, чтобы сделать это, а не activerecord. – bsvin33t