Пакетная обработка и функциональное программирование

Как разработчик Java, я использую Spring Batch для пакетной обработки, как правило, используя поточную библиотеку для экспорта больших файлов XML с помощью StAX, например.

Теперь я разрабатываю приложение Scala и задаюсь вопросом, есть ли какая-либо инфраструктура, инструмент или руководство для пакетной обработки.

В моем приложении Scala используется шаблон Cake, и я не уверен, как я могу интегрировать его с SpringBatch. Кроме того, я хотел бы следовать рекомендациям, описанным в Functional programming in Scala, и попытаться сохранить функциональную чистоту, используя материал, подобный монаде IO...

Я знаю, что это своего рода открытый вопрос, но я никогда ничего не читал об этом...

Кто-нибудь уже достиг функциональной пакетной обработки здесь? Как это работает? Должен ли я иметь главную роль, которая создает операцию пакетной обработки в монаде IO и запускает ее? Есть ли какой-либо инструмент или руководство, чтобы помочь, контролировать или обрабатывать перезапуск, например, мы используем Spring Batch в Java. Используете ли вы Spring Пакет в Scala? Как вы обрабатываете часть интеграции, например, ожидая сообщения JMS/AMQP, чтобы начать обработку, которая создает XML?

Любая обратная связь по проекту приветствуется

Ответ 1

Вы не указываете, какое приложение вы разрабатываете с помощью Scala, поэтому я собираюсь угадать здесь и предположим, что вы делаете серверную сторону. Идя дальше с диким угадыванием, скажем, вы используете Akka... потому что вы используете его, не так ли?:)

В этом случае, я думаю, что вы ищете Akka Quartz Scheduler, официальное расширение Quartz и утилиты для планирования в стиле cron в Акка. Я сам не пробовал, но из ваших требований кажется, что Akka + этот модуль будет хорошо подходить. Учтите, что Akka уже предоставляет перехватчики для перезапуска неактивных участников, и я не думаю, что было бы трудно добавить мониторинг пакетных процессов, используя обратные вызовы жизненного цикла, встроенные в участников.

Что касается взаимодействия с обменом сообщениями JMS/AMQP, вы можете использовать модуль Akka Camel, который обеспечивает поддержку отправки и получения сообщений через много протоколов, включая JMS. Используя этот модуль, вы можете заставить пользователя-потребителя получать сообщения от какой-либо конечной точки JMS и запускать любой процесс, который вы хотите оттуда, возможно, перенаправляя или отправляя новое сообщение субъекту, ответственному за этот процесс. Если процесс запускается либо таймером стиля cron, либо входящим сообщением, вы можете повторно использовать одного и того же актера для выполнения задачи.