Из консоли запускаем экшен (задание импорта), в котором собираются необходимые сущностей (до 1 млн), на каждый создается команда и ставится в очередь (RabbitMQ). Каждая команда импортирует сущность с удаленного сервера, а так же добавляет в соседние очереди команды на импорт других связанных сущностей. Очереди соответственно работают асинхронно.
Задача: узнать когда завершился импорт всех сущностей, в т.ч. связанных.
1. Можно ли, например, создать уникальный идентификатор задания и по нему сгруппировать очереди чтобы отслеживать количество оставшихся заданий принадлежащих группе?
2. Второй вариант - вместе с уникальным идентификатором хранить счетчик поставленных команд, при выполнении команды уменьшать его. Но это выглядит крайне не надежно.
Ну и конечно другие варианты решений приветствуются
Отследить прогресс выполнения заданий в очередях
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Отследить прогресс выполнения заданий в очередях
При постановке писать ID job-а куда-то, после завершения маркировать как выполненное.
Нравится Yii? Давайте сделаем его лучше!.
Re: Отследить прогресс выполнения заданий в очередях
Ну теоретически они в базу пишутся. Но их количество динамически меняется в процессе выполнения. Поэтому не понятно, как вычислить прогресс в таком случае. Хотя интересует даже не сам прогресс, а факт 100% завершения.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Отследить прогресс выполнения заданий в очередях
Для этого:
1. Надо знать сколько вообще сущностей.
2. При вычислении делать count(завершённых).
Заводить просто скалярный счётчик тоже можно, если детали не нужны. Но надо не забыть сделать его атомарным.
1. Надо знать сколько вообще сущностей.
2. При вычислении делать count(завершённых).
Заводить просто скалярный счётчик тоже можно, если детали не нужны. Но надо не забыть сделать его атомарным.
Нравится Yii? Давайте сделаем его лучше!.