Страница 1 из 1

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

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

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

1. Можно ли, например, создать уникальный идентификатор задания и по нему сгруппировать очереди чтобы отслеживать количество оставшихся заданий принадлежащих группе?
2. Второй вариант - вместе с уникальным идентификатором хранить счетчик поставленных команд, при выполнении команды уменьшать его. Но это выглядит крайне не надежно.
Ну и конечно другие варианты решений приветствуются :)

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

Добавлено: 2017.11.14, 23:15
samdark
При постановке писать ID job-а куда-то, после завершения маркировать как выполненное.

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

Добавлено: 2017.11.15, 08:29
SiZE
samdark писал(а): 2017.11.14, 23:15 При постановке писать ID job-а куда-то, после завершения маркировать как выполненное.
Ну теоретически они в базу пишутся. Но их количество динамически меняется в процессе выполнения. Поэтому не понятно, как вычислить прогресс в таком случае. Хотя интересует даже не сам прогресс, а факт 100% завершения.

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

Добавлено: 2017.11.17, 13:03
samdark
Для этого:

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

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