2013-10-26 17 views
11

Als Java-Entwickler bin ich es gewohnt, Spring Batch für die Batch-Verarbeitung zu verwenden, wobei ich in der Regel eine Streaming-Bibliothek verwende, um große XML-Dateien mit StAX zu exportieren.Batch-Verarbeitung und funktionale Programmierung

Ich entwickle jetzt eine Scala-Anwendung und frage mich, ob es ein Framework, ein Werkzeug oder eine Richtlinie gibt, um Stapelverarbeitung zu erreichen.

Meine Scala-Anwendung verwendet das Kuchenmuster und ich bin nicht sicher, wie ich das mit SpringBatch integrieren könnte. Außerdem möchte ich die Richtlinien befolgen, die in Functional programming in Scala beschrieben werden und versuchen, Funktionsreinheit zu halten, mit Sachen wie der IO-Monade ...

Ich weiß, dass dies eine offene Frage ist, aber ich lese nie etwas darüber ...

Hat schon jemand eine funktionale Batch-Verarbeitung erreicht? Wie hat es funktioniert? Soll ich ein Hauptprogramm haben, das eine Batch-Verarbeitung in einer IO-Monade erstellt und ausführt? Gibt es ein Tool oder eine Richtlinie, um die Neustartfähigkeit zu unterstützen, zu überwachen oder zu behandeln, wie wir Spring Batch in Java verwenden? Verwenden Sie Spring Batch in Scala? Wie gehen Sie mit dem Integrationsteil um, z. B. Warten auf eine JMS/AMQP-Nachricht, um die Behandlung zu starten, die ein XML erzeugt?

Jedes Feedback auf dem subjet ist willkommen

+2

Gibt es irgendwo ein gutes Intro, um zu erklären, was Spring Batch macht? Es ist ziemlich schwierig für mich, die Website zu verstehen. –

+2

Ich glaube nicht, "Reinheit" ist ein wünschenswertes Ziel (w.r.t. alles andere als Chemie). Das Verwenden von Typen, die öffentlich unveränderlich sind, ist von großem praktischen Wert. Das Austauschen aller veränderbaren Daten von deinem Code ist nicht möglich. –

+0

@RandallSchulz Ich spreche klar, ohne wirklich zu wissen, was das Ziel ist, aber ich bin glücklich, breit argumentieren zu können, dass Reinheit eine sehr nützliche Eigenschaft sein kann, wenn möglich aufrecht zu erhalten. Es ist offensichtlich nicht richtig für alle Berechnungen, aber ich finde es unglaublich nützlich, von "Reinheit als Standard" zu sprechen und nur Verunreinigungen hinzuzufügen, wie sie gerechtfertigt sind. Dies ist kein Ort, um darüber zu debattieren, aber ich wollte Ihrer Meinung ein Gegengewicht geben. –

Antwort

4

Sie erwähnen nicht, welche Art von Anwendung, die Sie mit Scala entwickeln, also werde ich hier wilde Vermutung und nehmen wir einen Blick ein Server-Seite tun. Gehen wir weiter mit wildem Raten, nehmen wir an, Sie benutzen Akka ... weil Sie es benutzen, nicht wahr? :)

In diesem Fall, ich denke, was Sie suchen, ist Akka Quartz Scheduler, die offizielle Quartz Extension und Dienstprogramme für Cron-Stil-Planung in Akka. Ich habe es nicht selbst versucht, aber von Ihren Anforderungen scheint es, dass Akka + dieses Modul gut passen würde. Berücksichtigen Sie, dass Akka bereits Möglichkeiten bietet, die Neustartfähigkeit fehlgeschlagener Akteure zu bewältigen, und ich denke nicht, dass es so schwierig wäre, die Überwachung von Batch-Prozessen unter Nutzung der Lebenszyklusrückrufe in Akteure zu integrieren.

In Bezug auf die Interaktion mit JMS/AMQP-Messaging können Sie die verwenden, die Unterstützung für das Senden und Empfangen von Nachrichten über eine Vielzahl von Protokollen bietet, einschließlich JMS. Mit diesem Modul können Sie einen Consumer-Akteur haben, der Nachrichten von einem JMS-Endpunkt empfängt und den von Ihnen gewünschten Prozess abfeuern und dabei wahrscheinlich eine neue Nachricht an den für diesen Prozess verantwortlichen Akteur weiterleiten oder senden. Wenn der Prozess entweder durch einen Cron-Stil-Timer oder eine eingehende Nachricht ausgelöst wird, können Sie den gleichen Akteur wiederverwenden, um die Aufgabe zu erfüllen.

Verwandte Themen