#laravel #task-queue
#laravel #очередь задач
Вопрос:
Итак, в моем API есть несколько мест, где выполняется процесс / отчет, который либо истекает по таймауту, либо просто занимает слишком много времени. Я хотел бы отложить эти задания в очередь и вместо этого вернуть ключ в моем ответе. Затем интерфейс будет пинговать службу, используя этот ключ, чтобы определить статус ее конкретного задания в очереди. Таким образом, у нас не будет зависания вызовов ajax в течение 2-3 минут. Возможно, я мог бы даже создать средство просмотра очередей, которое позволило бы вам просматривать задания в нем и даже отменять некоторые и т. Д.
Есть ли в Laravel что-то встроенное или для этого уже есть пакет? Существуют ли другие лучшие варианты решения такого рода проблем?
Комментарии:
1. Комбинация laravel.com/docs/5.3/queues и laravel.com/docs/5.3/broadcasting скорее всего, подойдет.
2. за исключением того, что я использую 5.2, в котором нет трансляции 🙂
3. Конечно, это так. laravel.com/docs/5.2/events#broadcasting-events
4. Я думаю, это может сработать. Я больше искал способ получить пинг интерфейса и получить статус. У меня возникает идея протолкнуть сокет …. возможно, стоит изучить.
5. Возможность проверки статуса будет зависеть от используемого вами драйвера очереди и того, что поддерживает базовый API. Я не думаю, что вы могли бы сделать это, например, с помощью драйвера SQS. Лучше использовать широковещательную передачу — пусть работник очереди транслирует события, когда он начинает работу, события выполнения во время работы и события завершения по завершении.
Ответ №1:
это то, что вы используете для очередей laravels
Комментарии:
1. Нет, это позволит мне помещать вещи в очередь, но это не помогает мне проверять, что находится в очереди, чтобы узнать статус выполняемого задания.
Ответ №2:
Я не верю, что это существовало, когда я впервые опубликовал этот вопрос. Однако теперь в Laravel для этого создано следующее: https://laravel.com/docs/5.6/horizon это все, что я искал.