Resque: zadania krytyczne czasowo, które są wykonywane kolejno na użytkownika

Moja aplikacja tworzy zadania resque, które muszą być przetwarzane kolejno na użytkownika i powinny być przetwarzane tak szybko, jak to możliwe (maksymalne opóźnienie 1 sekundy).

Przykład: zadanie1 i zadanie2 jest tworzone dla użytkownika1 i zadania3 dla użytkownika2. Resque może przetwarzać zadanie 1 i zadanie 3 równolegle, ale zadanie 1 i zadanie 2 powinny być przetwarzane sekwencyjnie.

Mam różne pomysły na rozwiązanie:

Mogłem użyć różnych kolejek (np. Kolejka_1 ... kolejka_10) i uruchomić pracownika dla każdej kolejki (np.rake resque:work QUEUE=queue_1). Użytkownicy są przydzielani do kolejki / pracownika w czasie wykonywania (np. Przy logowaniu, codziennie itp.)Mogłem korzystać z dynamicznych „kolejek użytkowników” (np. Kolejka _ # {user.id}) i próbować rozszerzyć resque, że tylko 1 pracownik może przetworzyć kolejkę na raz (zgodnie z pytaniem wResque: jeden pracownik na kolejkę)Mogłabym umieścić zadania w kolejce innej niż resque i użyć metadany „na użytkownika” z resque-lock (https://github.com/defunkt/resque-lock), który obsługuje te zadania.

Czy masz jakieś doświadczenia z jednym z tych scenariuszy w praktyce? Czy masz inne pomysły, o których warto pomyśleć? Byłbym wdzięczny za każde wejście, dziękuję!

questionAnswers(2)

yourAnswerToTheQuestion