내 응용 프로그램은 사용자별로 순차적으로 처리해야하는 resque 작업을 생성하며 최대한 빨리 처리해야합니다 (최대 지연 1 초).Resque : 사용자별로 순차적으로 실행되는 시간이 중요한 작업
예 : 사용자 1에게는 job1과 job2가 작성되고 사용자 2에게는 job3이 작성됩니다. Resque는 job1과 job3을 병렬로 처리 할 수 있지만 job1과 job2는 순차적으로 처리해야합니다.
가 나는 해결책에 대해 서로 다른 생각을 가지고
- 내가 다른 대기열을 사용할 수 있습니다 (예를 들어, queue_1 ... queue_10)를 각각의 큐 (예를 들어,
rake resque:work QUEUE=queue_1
)에 대한 작업자를 시작합니다. 사용자는 런타임에 대기열/작업자에게 할당됩니다 (예 : 로그인, 매일 등) - 동적 "사용자 대기열"(예 : queue _ # {user.id})을 사용하여 1 명의 작업자 (Resque: one worker per queue에서 묻는대로)
- 대기열이 아닌 대기열에 작업을 넣고 이러한 작업을 처리하는 resque-lock (https://github.com/defunkt/resque-lock)과 함께 "사용자 별 메타 작업"을 사용할 수 있습니다.
실습 중 하나와 관련된 경험이 있습니까? 아니면 생각할 가치가있는 다른 아이디어가 있습니까? 나는 어떤 의견을 주셔서 감사합니다, 감사합니다!
문제는 job1이 job2에 대해 명시 적으로 알지 않아야한다는 것인데, 이는 서로 다른 요청 등에서 생성 될 수 있기 때문입니다. – lacco
나는 job2에서 resque-retry를 사용할 것이다. job1이 완료되었는지 확인하고 나중에 대기열에 다시 대기하지 않는 경우 resque-retry는 필요에 따라 지수 적 백 오프 또는 제한된 시도를 사용하도록 설정할 수 있습니다. – TomDunning
job2는 특정 사용자에 대해 job1이 진행 중임을 어떻게 알 수 있습니까? – lacco