2013-10-26 1 views
11

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

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

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

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

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

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

+2

Есть ли хорошее введение, чтобы объяснить, что делает Spring Batch? Мне сложно понять сайт. –

+2

Я не думаю, что «чистота» - это желаемая цель (w.r.t. ничего, кроме химии). Использование типов, которые являются публично неизменными, имеет большую практическую ценность. Извлечение всех изменяемых данных из вашего кода не происходит. –

+0

@ RandallSchulz Я ясно говорю, не зная, какова цель этого, но я рад широко утверждать, что чистота может быть очень полезным свойством поддерживать, если это возможно. Разумеется, это неправильно для всех вычислений, но я считаю это невероятно полезным для рассуждения из «чистоты по умолчанию» и только добавляет примеси, поскольку они являются оправданными. Это не место для обсуждения этого вопроса, но я хотел бы дать вам противоположный баланс. –

ответ

4

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

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

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