Как правильно поставить задачу в очередь и по завершению уведомить пользователя?
Есть непонимание как поставить задачу на исполнение в очередь и потом уведомить конкретного пользователя о завершении. Может быть дело в приницпе в непонимании работы очередей.
Например задача: пользователь 1 загружает 10 файлов для преобразования в PDF и пользователь 2 тоже самое. Нужно отправить задачу на конвертацию файлов, а по итогу уведомить конкретного пользователя.
Имеется: браузер с JS, на бэкенде приложение на Yii2 и PHP, RabbitMQ и, возможно, ещё инстанс подключенный по сокетам с браузером для уведомлений (не знаю нужно ли)
У меня запутанные схемы работы
Схема 1: из браузера прилетает запрос в контроллер Yii2. Тот сразу отдаёт ответ клиенту (сейчас всё сделаем, мы вас оповестим) и начинает пыхтеть делать. Как только сделал - отправляет сообщение в RabbitMQ. С рэббитом держит связь по подписке тот самый вспомогательный инстанс (тот, что связан с пользователем по сокетам) и как-только в рэббите происходит событие, он выплёвывет его в тот инстанс-демон, а тот уже уведомляет пользователя. Правда всё ещё не понимаю как уведоимть конкретного пользователя и в какой форме передать задачу рэббиту.
Схематично получается работа такой:
браузер → ПО → по завершению задачи RabbitMQ → инстанс уведомитель → браузер
Схема 2 замудрёней: из браузера прилетает запрос в контроллер Yii2. Тот сразу отдаёт ответ клиенту (сейчас всё сделаем, мы вас оповестим) и ставит задачу в очередь в RabbitMQ. Рэббит в какой-то момент отсылает задачу какому-то исполнителю (не знаю кому и где), который дёргает Yii2, который делает задачу и возвращает результат. Дальше этот исполнитель говорит каким-то образом рэббиту "я всё" и рэббит кидает событие во инстанс, связанный с клиентом
Схематично получается работа такой:
браузер → ПО → задачу в очередь RabbitMQ → исполнитель → по завершению в rabbitMQ → инстанс уведомитель → браузер
Как правильно всё это организовывается? Откуда куда кто что должен отдать? Нужно задачу ставить в очередь или в очередь надо ставить уведомления-рассылки пользователям? Или и то и другое? А rabbitMQ куда должен отослать в итоге результат? В очередь с идентификатором пользователя или какую?
(Знаю про консьюмеров в rabbit, но так и не понимаю, это тот, кто примет в итоге уведомление или тот, кто отправит задачу на выполнение или это может быть и то и другое)