Я очень надеялся на RabbitMQ, но это не совсем то, что мне нужно. Много наворотов
Есть какой-то планировщик задач попроще, чтобы передал http-запрос в качестве параметра, далее сразу (либо через некоторый промежуток времени) этот планировщик запрос отправил, подождал результат, отправил следующий и тд?
Есть вариант написать такой на java - стоит ли затеваться?
Atllantis: давайте так. "крайне не рекомендуется" - это стериотип. Вполне себе можно, сдобрив сверху supervisord-ом каким и ограничив лимит по памяти на случая течки (иногда случается, так как похапэшники не сильно запариваются о таких вещах). Но в целом у меня вот скриптики месяцами крутятся и все хорошо. Перезапускаются только при деплое.
ну и да - очередь то скорее всего на чемт-то надежнее написано и воркеры как были stateless так и остаются.
ну допустим. пользователь резервирует товар. через 30 минут нужно проверить факт подтверждения заказа в базе. я хочу все организовать через централизованный api. то есть после бронирования нужно добавить задачу - через полчаса дернуть api по http и проверить подтверждение заказа
IsaevDev: beanstalkd вроде как умеет откладывать выполнение задачи по таймеру.
То есть мы ложим в beanstalkd задачу с пометкой "отложить на 30 минут" и в задаче указываем что делать и т.д.
В то же время у нас все время висит воркер (на php) который ждет задач от beanstalkd. Он подключен к нему как обычный клиент и ждет. Поскольку мы положили отложенную задачу он получит ее только через 30 минут (или позже на пару секунд если воркер был занят другими задачами).
ну допустим. пользователь резервирует товар. через 30 минут нужно проверить факт подтверждения заказа в базе
В момент резервирования товара в базу летит запись где datetime - время резервирования. На cron работает скрипт который выбирает все товары где datetime > 30 минут и проверяет по ним заказы, если заказа нет - товар удаляем из резерва.
IsaevDev: Если задача ресурсоёмкая, то ставим метку что идёт выполнение, в момент запуска скрипта проверяем метку, если она = 1 завершаем скрипт, если = 0 значит всё выполнено, можно работать дальше
Самый простой вариант в юниксе есть 2 инструмента для отложенных задач:
1) команда at wget http://site.ru | at 06:00 - выполнит в указанное время
2) команда sleep sleep 4h && wget http://site.ru - выполнит через указанное время
Команда может быть любой, если файл который надо выполнить у вас на сервере то вместо wget можно использовать php.
Передавать команды можно через shell_exec