NServiceBus Sagas: Пакетные вещи вместе?
Название, возможно, не совсем подходит для того, что я прошу, но я не могу придумать, как это правильно сформулировать.
По сути, я проектирую систему, в которой транзакция поступает в систему, проверяется, применяются бизнес-правила и транзакция сохраняется в базе данных. У каждой транзакции есть определенный ключ, поэтому я думал о создании саги, в которой реализован шаблон контроллера и определены эти шаги.
Однако проблема возникает при передаче данных по времени позже. У меня есть потенциально тысячи разных транзакций, которые необходимо передавать разным партнерам в указанное время отключения. Мне нужно, чтобы все транзакции для указанного партнера были в файле этого партнера. Чего я не вижу, так это как заставить все транзакции, в которых есть отдельная сага, запускать и собирать одновременно.
Я думал о реализации тайм-аута, чтобы каждая транзакция запускалась во время отключения, но как мне собрать все транзакции вместе?
Один из вариантов, который я рассматриваю, - это использовать Quartz.Net, чтобы настроить синхронизированное задание для запуска в каждое время отключения, а затем заставить это задание опубликовать сообщение обратно в сагу и использовать функцию ConfigureHowToFindSaga для обновления статуса транзакции. Я просто не уверен, что это лучшая реализация.
1 ответ
После обработки хотя бы одной из транзакций для данного партнера вы можете запросить тайм-аут на основе расчета текущего времени с ожидаемым временем отключения. Например, если вы обрабатываете транзакцию в 9:00, это означает, что у вас есть по крайней мере одна транзакция для отправки этому партнеру, и если ваше отключение происходит в 17:00, то запрошенное время ожидания составляет 8 часов. После обработки тайм-аута вы можете отправить файл и обновить сагу о том, что файл был отправлен.