Мы пытаемся сериализовать обработку списка бизнес-объектов с помощью Saga.
Прямо сейчас, без саги, мы просто перебираем список объектов и запускаем асинхронную bus.Send(new ProcessBusinessObejct(obj))
, чтобы выполнялись обработчики. Таким образом, обработка происходит более или менее параллельно, в зависимости от этого параметра, я считаю:
endpointConfiguration.LimitMessageProcessingConcurrencyTo( 4 );
Это сработало нормально, но количество одновременных обработчиков теперь сильно зависит от базы данных.
Было бы нормально запускать эти обработчики последовательно, то есть переходить к следующему только тогда, когда текущий процесс завершился (не удалось или завершился успешно). Мы не хотим устанавливать параллелизм равным 1, это повлияет на все обработчики в конечной точке.
Идея состоит в том, чтобы использовать шаблон Scatter / Gather и сагу, чтобы отслеживать количество объектов и обновлять конечный автомат с помощью счетчика (общее количество, число неудачных попыток, количество успешных попыток) и, наконец, стрельбы. событие, когда список готов / пуст.
Проблема в
А) Я не уверен, как отслеживать список в саге. SagaData нужен список для хранения всех объектов? Затем удалите экземпляр, когда обработчик сигнализирует о завершении обработки.
Сага не поддерживает иерархические данные и, следовательно, не список или список. Я полагаю, что это все еще имеет место в NSB v7.
И Б) Это использование саги осуществимо или излишне, или есть гораздо более простой способ сделать это?
Мы используем Sql Server персистентность и транспорт и NSB 7.
Любой вклад приветствуется!