Ứng dụng của tôi tạo các công việc resque phải được xử lý tuần tự cho mỗi người dùng và chúng sẽ được xử lý nhanh nhất có thể (trễ tối đa 1 giây).Resque: các công việc thời gian quan trọng được thực thi tuần tự cho mỗi người dùng
Ví dụ: job1 và job2 được tạo cho user1 und job3 cho user2. Resque có thể xử lý song song job1 và job3, nhưng job1 và job2 cần được xử lý tuần tự.
tôi có những suy nghĩ khác nhau cho một giải pháp:
- tôi có thể sử dụng hàng đợi khác nhau (ví dụ queue_1 ... queue_10) và bắt đầu một công nhân cho mỗi hàng đợi (ví dụ
rake resque:work QUEUE=queue_1
). Người dùng được chỉ định vào hàng đợi/công nhân khi đang chạy (ví dụ: khi đăng nhập, mỗi ngày, v.v.) - Tôi có thể sử dụng "hàng đợi người dùng" động (ví dụ: hàng đợi _ # {user.id}) và cố gắng mở rộng lại chỉ 1 công nhân có thể xử lý hàng đợi tại một thời điểm (như được yêu cầu trong Resque: one worker per queue)
- Tôi có thể đặt công việc vào hàng đợi không được phục hồi và sử dụng "công việc meta cho mỗi người dùng" bằng cách khóa lại (https://github.com/defunkt/resque-lock).
Bạn có kinh nghiệm nào với một trong những tình huống đó trong thực tế không? Hay có những ý tưởng khác có thể đáng để suy nghĩ? Tôi sẽ đánh giá cao bất kỳ đầu vào, cảm ơn bạn!
Vấn đề là job1 không nên biết rõ về job2 vì chúng không được tạo cùng một lúc (chúng có thể được tạo trong các yêu cầu khác nhau, v.v.) – lacco
Trong trường hợp này tôi muốn sử dụng thử lại lần nữa, trên job2, để thực hiện một kiểm tra nếu job1 được hoàn thành và nếu không được xếp lại sau đó - thử lại, có thể được thiết lập để sử dụng hoặc là backoffs mũ hoặc giới hạn trys khi cần thiết. – TomDunning
Cách job2 biết rằng công việc 1 đang được tiến hành cho một người dùng cụ thể? – lacco