Как я могу синхронизировать множественные рабочие рабочие?
-
27-09-2019 - |
Вопрос
У меня есть следующая ситуация:
- Три задания: a, b, c (реализован как рабочие рабочие)
- Два пользовательских события (звонки метода контроллера)
Задачи срабатывают таким образом:
- Первое событие пользователя вызывает задание A и задачу B.
- Затем дополнительное событие пользователя может запускать задачу C, но эта задача не должна работать до тех пор, пока задача A и B не закончится.
Как я могу принять эту цепочку событий?
Один из способов выполнить задачу A и B в начале задачи C, но задача по запускам события пользователя может никогда не произойти, но задача A и B должна выполняться тем не менее.
В «нормальной» программе у меня будет весь арсенал объектов синхронизации в моем распоряжении (Mutexes, семафоры, критические разделы, ...). Но что я могу сделать здесь?
(Если это имеет значение, приложение Rails будет работать на сервере Linux, а для сайтов настроен для использования Starling)
Решение
Вы можете использовать распределенный замок:
http://github.com/tanin47/ruby_redis_lock. (который мой)
Требуется редис, хотя.
Или вы можете создать библиотеку блокировки самостоятельно с другими СУБД, например MySQL.