Спасибо за ответы!
В данный момент реализовал так:
На листенер приходит запрос, после всех проверок (токены, схема json, допустимые параметры) в таблицу tasks(task_id varchar(50), status varchar(10), result text, timest timestamt ) заноситься id задачи и статус "new", после передачи в очередь статус меняется на "queue". как только воркер достает сообщение из очереди он смотрит taskId и меняет статус на "inWork", после выполнения статус меняется на "complete" и записывается результат. При каждом обновлении статуса происходит обновление поля timest. Пользователь проверяет статус задачи get запросом и если статус !=complete то ему возвращается текущий статус и таймштамп. если статус = complete, то пользователю возвращается поле result и статус меняется на "was_returned" (далее скрипт в фоне делитит записи со статусом "was_returned", которые старше 48 часов и записи "completed", которые старше недели). Как вам такая схема работы?
Варианты с пушем очень интересные обязательно попробую их попозже.