wake-up-neo.net

Wann ist Spring Integration vs. Camel anzuwenden?

Als erfahrener Spring-Benutzer ging ich davon aus, dass die Spring-Integration in einem aktuellen Projekt, das einige (JMS-) Messaging-Funktionen erfordert, am sinnvollsten ist ( more details ). Nach einigen Tagen der Arbeit mit Spring Integration ist der Konfigurationsaufwand angesichts der Anzahl der Kanäle, die Sie konfigurieren müssen, um die Kommunikation zwischen Anforderung und Antwort (Abhören verschiedener JMS-Warteschlangen) zu ermöglichen, immer noch hoch.

Aus diesem Grund habe ich nach Hintergrundinformationen gesucht, wie sich Camel von Spring Integration unterscheidet, aber es scheint, als ob Informationen da draußen ziemlich knapp sind.

Die Frage ist: Welche Erfahrungen haben Sie mit dem einen Stapel über dem anderen gemacht? In welchen Szenarien würden Sie Camel empfehlen, wenn Spring Integration nicht unterstützt wird? Wo siehst du Vor- und Nachteile von jedem? Jeder Ratschlag von realen Projekten wird sehr geschätzt.

127
ngeek

Wir entscheiden uns für Camel anstelle von Spring-Integration, weil die flüssige API wirklich gut ist. Wir verwenden es tatsächlich in Spring-Projekten und verwenden Spring, um einen Teil davon zu konfigurieren. Die Programmierschnittstellen sind klar und es gibt viele sinnvolle Komponenten.

Wir haben ein kleines Shootout gemacht und im Grunde zu dieser Zeit für unsere Anforderung Camel gewonnen. Wir verwenden es hauptsächlich, um interne Datendateien an/von externen Parteien zu übertragen, die normalerweise Formatkonvertierungen erfordern, die sie mit ftp/sftp/... senden oder an eine E-Mail anhängen und versenden.

Wir fanden den Bearbeitungs-Kompilierungs-Debug-Zyklus verkürzt. Wenn Sie Groovy verwenden, um das Erstellen von Routen zu experimentieren, werden Boni hinzugefügt.

Spring-Integration ist auch ein großartiges Produkt, und ich bin mir ziemlich sicher, dass es auch unsere Bedürfnisse befriedigen würde.

66
Peter Tillemans

Ich empfehle Spring Integration nur, wenn Sie bereits ein Spring-Projekt haben und nur eine "grundlegende" Integration mit File, FTP, JMS, JDBC usw. hinzufügen müssen.

Apache Camel hat zwei Hauptvorteile:

  1. Viele, viele weitere Technologien werden unterstützt.
  2. Neben einer (guten) XML-DSL gibt es fließende APIs für Java, Groovy und Scala.

Da Apache Camel eine sehr gute Integration mit Spring aufweist, würde ich es stattdessen auch für die Spring-Integration in den meisten Spring-Projekten verwenden.

Wenn Sie weitere Informationen benötigen, können Sie meine Erfahrungen in meinem Blogbeitrag nachlesen: Qual der Wahl: Welches Integrationsframework verwenden - Spring Integration, Mule ESB oder Apache Camel?

61
Kai Wähner

Ich habe kürzlich ein Shoot-out von Camel vs Spring Integration mit dem Ziel durchgeführt, Apache Kafka zu integrieren. Obwohl ich ein begeisterter Frühlingsentwickler bin, habe ich meinen Verdacht mit dem stetig wachsenden Projektstapel von Spring leider bestätigt: Frühling ist großartig als IOC-Container, um als Klebstoff für andere Frameworks zu dienen, aber es kann nicht bereitgestellt werden brauchbare Alternativen to diese Frameworks . Es mag Ausnahmen geben, nämlich alles, was mit MVC zu tun hat, wo Spring herkam und wo es großartige Arbeit leistet, aber andere Versuche, neue Funktionen zusätzlich zu den Containerfunktionen bereitzustellen, scheitern an Drei Gründe und der SI Kafka Anwendungsfall bestätigen alle:

  • Einführung eines umständlichen, schwer zu bedienenden DSL für die XML-Konfiguration.
  • Seiten mit XML-Konfigurationscode, um alle Framework-Komponenten miteinander zu verbinden.
  • Fehlende Ressourcen zur Bereitstellung von Funktionen auf dem Niveau dedizierter Frameworks.

Zurück zu den Ergebnissen meiner Schießerei: Am wichtigsten ist, dass mich das Gesamtkonzept von Camels für Routen zwischen Endpunkten beeindruckt . Kafka fügt sich nahtlos in dieses Konzept ein, und drei Konfigurationslinien reichen aus, um alles in Betrieb zu nehmen. Probleme, die während des Prozesses auftreten, werden durch ausführliche Dokumentation des Projektteams) adressiert sowie viele Fragen zum Stackoverflow. Last but not least gibt es eine umfassende Integration in Spring , die keine Wünsche offen lässt.

Im Gegensatz zu SI ist die Dokumentation für die Kafka Integration ziemlich intensiv und erklärt immer noch nicht klar, wie Kafka integriert werden kann. Die Integration von Kafka ist gedrückt in die SI-Methode eingebunden, was zusätzliche Komplexität mit sich bringt.Andere Dokumentationen, zB über Stackoverflow, sind ebenfalls weniger umfangreich und weniger hilfreich als für Camel.

Mein Fazit: Schuster bleiben bei Ihrem Handwerk - nutzen Sie Spring als Container und Camel als Rahmen für die Systemintegration.

26
Fritz Duchardt

Ich komme wirklich darauf an, was du machen willst. Wenn Sie etwas erweitern müssen, um Ihre eigene Messaging-Lösung zu erstellen, hat Spring Integration das bessere Programmiermodell. Wenn Sie etwas benötigen, das viele Protokolle ohne benutzerdefinierten Code unterstützt, ist Camel Spring Integration einen Schritt voraus.

Ein kleines Shootout ist eine sehr gute Idee. Stellen Sie nur sicher, dass Sie versuchen, die Dinge zu tun, die Sie normalerweise im Projekt tun würden.

--Haftungsausschluss: Ich bin ein Spring Integration Committer

14
iwein

Die meisten Vergleiche von Camel und SI, die ich gesehen habe, berücksichtigen Folgendes nicht:

1.) Die Auswirkung von Spring Boot auf die Entwicklerproduktivität für Spring Integration

2.) Die Wirkung von Spring XD hat dazu geführt, dass Spring-Integrationsanwendungen ohne Code-Kompilierung verfügbar sind - auch Spring XD-Quellen und -Senken sind einfach Spring-Integrations-Kanaladapter, wenn Sie Spring XD erweitern möchten.

3.) Die Wirkung von Spring XD hat dazu geführt, dass Spring Integration, Spring Batch, Spring Data (+ Hadoop!) In einem Stapel zusammengefasst wurden, wodurch die Stapel- und Stream-Verarbeitung, HDFS/Apache Hadoop-Unterstützung und vieles mehr für Spring Integration wirksam wurden.

4.) Die Wirkung der bald veröffentlichten Spring Integration 4.0 Java DSL https://github.com/spring-projects/spring-integration-extensions/ Wiki/Spring-Integration-Java-DSL-Referenz

Für Ihre Überlegung,

/ Pieter (Haftungsausschluss Ich arbeite bei Pivotal)

9
PivotalPieter

Wir verwenden Spring Integration für unsere Anwendung und überlegen jetzt, auf Apache Camel umzusteigen, da wir viele Probleme mit dem Spring Integration-Framework hatten. Hier sind einige Probleme.

  1. Die CachingConnectionFactory, die Spring bereitstellt, öffnet Tausende von inaktiven Verbindungen in IBM MQ, und es gibt keine Garantie dafür, dass diese Verbindungen wiederverwendet werden. Und trotzdem bleiben diese Verbindungen für immer offen, was Probleme auf der MQ-Seite schafft. Musste die Anwendung jede Woche in niedrigeren Umgebungen neu starten, nur um die Verbindungen zu aktualisieren. Apache Camel bietet auch Caching und die Verbindungen scheinen je nach Auslastung zu steigen/fallen.

  2. Spring bietet keine Mapper für QoS-Parameter. Selbst wenn Sie QoS aktivieren, gehen der Übermittlungsmodus und die Ablauf-/Timolive-Eigenschaften verloren (ich werde dafür ein JIRA-Problem ansprechen). Apache Camel behandelt dies und QoS-Parameter werden an vorgelagerte Anwendungen gesendet und nicht gelöscht.

Ich arbeite gerade an Problemen mit der Behandlung der Ausnahmen und Transaktionen mit Apache Camel, die Spring anscheinend mit AOP besser zu handhaben schien.

5
Selvakumar

Eigentlich würde ich sagen, FTP hat seine Inkubationszeit beendet. Sie können eine einfache Suche in SI-Foren/JIRA durchführen, um festzustellen, welche neuen Funktionen implementiert und welche Fehler behoben wurden. Aus verschiedenen Gesprächen geht hervor, dass es bereits einige Produktionsprobleme gibt. Daher würde ich vorschlagen, einen zweiten Blick darauf zu werfen und uns Ihre Bedenken natürlich über mitzuteilen

http://forum.springsource.org/forumdisplay.php?42-Integration
https://jira.springsource.org/browse/INT

Prost Oleg

Haftungsausschluss: Ich bin ein Committer von Spring Integration

4

Apache Camel ist ein sehr gutes Framework und auch sehr vollständig. Wenn Ihre Anwendung Spring verwendet, ist mein persönlicher Rat die Verwendung von Spring Integration.

Spring Integration ist das Integrations-EIP-Beschwerdeframework des Spring-Source-Ökosystems. Es hat eine hervorragende Integration in das Ökosystem: Spring Boot, Batch, XD; Selbst der Kern verwendet dieselbe Abstraktion ab Spring Framework 4. Einige der Messaging-Abstraktionen wurden in das Framework verschoben, um zu beweisen, dass die grundlegende Messaging-Abstraktion von Spring Integration sehr stark ist. Das Spring Framework verwendet jetzt beispielsweise die Messaging-Abstraktion für Spring Web, Unterstützung für Web-Sockets.

Eine weitere gute Sache in einer Spring-Anwendung mit Spring-Integration in Bezug auf die Verwendung von Apache Camel ist, dass Sie mit Spring-Integration nur einen Anwendungskontext verwenden können. Denken Sie daran, dass der Kamelkontext ein Frühlingskontext ist. Wenn Sie die Möglichkeit haben, eine neue Spring-Version zu verwenden, empfehle ich die Verwendung von Spring Integration Java DSL für die Konfiguration. Ich benutze es für meine neuen Projekte und es fühlt sich lesbarer und klarer an. Ich hoffe, dass diese Reflexion Ihnen bei Ihren Bewertungen helfen kann.

2
Valerio Vaudi

Ein Grund für die Verwendung von Camel over Spring Integration ist, wenn Sie ein komplexeres EIP-Set benötigen. Spring Integration bietet keine Abstraktionen über Dinge wie ThreadPool.

Camel stellt zusätzliche Konstrukte zur Verfügung, um einige Aspekte der Arbeit mit gleichzeitigem Code zu vereinfachen:

http://camel.Apache.org/camel-23-threadpool-configuration.html

Wenn Sie so etwas nicht benötigen und nur eine Verbindung zu Dateien, JMS, FTP-Endpunkten usw. herstellen möchten, verwenden Sie einfach Spring Integration.

1
Jon

Camel fungiert als Middleware für Anwendungen, in denen Datenmodellierung, Transformation von Nachrichtenwerten und Choreografie von Nachrichten durchgeführt werden können.

0
sudhirkondle