Отследить прогресс выполнения заданий в очередях

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Отследить прогресс выполнения заданий в очередях

Сообщение SiZE »

Из консоли запускаем экшен (задание импорта), в котором собираются необходимые сущностей (до 1 млн), на каждый создается команда и ставится в очередь (RabbitMQ). Каждая команда импортирует сущность с удаленного сервера, а так же добавляет в соседние очереди команды на импорт других связанных сущностей. Очереди соответственно работают асинхронно.

Задача: узнать когда завершился импорт всех сущностей, в т.ч. связанных.

1. Можно ли, например, создать уникальный идентификатор задания и по нему сгруппировать очереди чтобы отслеживать количество оставшихся заданий принадлежащих группе?
2. Второй вариант - вместе с уникальным идентификатором хранить счетчик поставленных команд, при выполнении команды уменьшать его. Но это выглядит крайне не надежно.
Ну и конечно другие варианты решений приветствуются :)
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Отследить прогресс выполнения заданий в очередях

Сообщение samdark »

При постановке писать ID job-а куда-то, после завершения маркировать как выполненное.
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Отследить прогресс выполнения заданий в очередях

Сообщение SiZE »

samdark писал(а): 2017.11.14, 23:15 При постановке писать ID job-а куда-то, после завершения маркировать как выполненное.
Ну теоретически они в базу пишутся. Но их количество динамически меняется в процессе выполнения. Поэтому не понятно, как вычислить прогресс в таком случае. Хотя интересует даже не сам прогресс, а факт 100% завершения.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Отследить прогресс выполнения заданий в очередях

Сообщение samdark »

Для этого:

1. Надо знать сколько вообще сущностей.
2. При вычислении делать count(завершённых).

Заводить просто скалярный счётчик тоже можно, если детали не нужны. Но надо не забыть сделать его атомарным.
Ответить