У меня есть система обработки заданий, в которой каждое задание содержит тысячи отдельных задач, для выполнения которых требуются разные стратегии. Индивидуальные задачи составляют всю работу. Если все задачи были выполнены, задание помечается как успешно завершенное, и выполняются другие шаги, если какая-либо из задач не выполняется, задание должно быть помечено как сбойное и предпринимаются другие шаги, если время ожидания задания истекает, задание должно быть отмечено как не удалось и другие шаги предпринимаются.
Как только все результаты для задания будут получены, можно будет выбрать следующее задание. Следующее задание не следует загружать, пока оно обрабатывается.
Вот как выглядит поток:
Вертикаль опроса заданий публикует задание в шине событий, а Вертикаль обработки заданий публикует каждую задачу в шине событий. Когда стратегия работы завершается, она публикует результат задачи в шине событий.
Проблема в том, что я не знаю правильного способа определить, когда все задачи выполнены в этой модели. Все статьи не имеют состояния, Вертикаль обработки заданий не ожидает какого-либо будущего, и даже если Вертикаль результатов задания была с отслеживанием состояния, она не знает, сколько результатов следует ожидать.
Единственный способ, которым я могу это сделать, - это иметь глобальный объект с отслеживанием состояния. Но я не думаю, что это хороший дизайн.
Кроме того, мне нужно знать, когда для задания истекло время. То есть он работает дольше, чем должен, и мне нужно признать его неудачным, зарегистрировать его и двигаться дальше.
Я мог бы сделать это с помощью глобального состояния, но опять же, я не думаю, что это правильное решение.
Имеет ли смысл этот узор по вертикали для того, что я пытаюсь сделать?