Als erfahrener Spring-Benutzer ging ich davon aus, dass Spring Integration in einem kürzlich durchgeführten Projekt am sinnvollsten ist, für das einige (JMS) Messaging-Funktionen erforderlich sind ( weitere Details ). Nach einigen Tagen mit Spring Integration scheint es immer noch ein großer Konfigurationsaufwand zu sein, wenn man bedenkt, wie viele Kanäle Sie konfigurieren müssen, um eine Anfrage-Antwort-Kommunikation (Abhören verschiedener JMS-Warteschlangen) zu ermöglichen.
Daher habe ich nach Hintergrundinformationen gesucht, wie sich Camel von Spring Integration unterscheidet, aber es scheint, dass Informationen da draußen ziemlich sparsam sind. Ich fand:
- http://java.dzone.com/articles/spring-integration-and-apache (Sehr neutraler Vergleich zwischen der Implementierung eines realen Integrationsszenarios in Spring Integration und Camel ab Dezember 2009)
- http://hillert.blogspot.com/2009/10/apache-camel-alternatives.html (Vergleich von Kamel mit anderen Lösungen, Oktober 2009)
- http://raibledesigns.com/rd/entry/taking_apache_camel_for_a (Matt Raible, Oktober 2008)
Die Frage ist: Welche Erfahrungen haben Sie mit der Verwendung des einen Stapels über dem anderen gemacht? In welchen Szenarien würden Sie Camel empfehlen, wenn Spring Integration nicht unterstützt wird? Wo sehen Sie Vor- und Nachteile von jedem? Jeder Rat aus realen Projekten wird sehr geschätzt.
Antworten:
Wir wählen Camel anstelle von Spring-Integration, weil die fließende API wirklich gut ist. Wir verwenden es tatsächlich in Spring-Projekten und verwenden Spring, um einen Teil davon zu konfigurieren. Die Programmier-APIs sind klar und es gibt eine große Anzahl sinnvoller Komponenten.
Wir haben ein kleines Shootout gemacht und im Grunde genommen hat Camel damals für unsere Anforderung gewonnen. Wir verwenden es hauptsächlich, um interne Datendateien an / von externen Parteien zu übertragen, für die normalerweise Formatkonvertierungen erforderlich sind, die mit ftp / sftp / ... gesendet oder an eine E-Mail angehängt und gesendet werden.
Wir fanden den Edit-Compile-Debug-Zyklus reduziert. Wenn Sie Groovy zum Experimentieren verwenden, um Routen einzurichten, 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.
quelle
Ich empfehle Spring Integration nur, wenn Sie bereits ein Spring-Projekt haben und nur eine "grundlegende" Integration mit Datei, FTP, JMS, JDBC usw. hinzufügen müssen.
Apache Camel hat zwei Hauptvorteile:
Da Apache Camel sehr gut in Spring integriert ist, würde ich es in den meisten Spring-Projekten sogar anstelle von Spring Integration verwenden.
Wenn Sie weitere Informationen benötigen, können Sie meine Erfahrungen in meinem Blogbeitrag lesen: Die Qual der Wahl: Welches zu verwendende Integrationsframework - Spring Integration, Mule ESB oder Apache Camel?
quelle
Ich habe kürzlich ein Shootout von Camel vs Spring Integration durchgeführt, um Apache Kafka zu integrieren . Obwohl ich ein begeisterter Spring-Entwickler bin, stellte ich leider fest, dass mein Verdacht mit dem stetig wachsenden Project-Stack von Spring bestätigt wurde: Spring ist als IOC-Container großartig, um als Klebstoff für andere Frameworks zu dienen, bietet jedoch keine brauchbaren Alternativen zu diesen Frameworks . Es mag Ausnahmen geben, nämlich alles, was mit MVC zu tun hat, woher Spring stammt und wo es großartige Arbeit leistet, aber andere Versuche, neue Funktionen zusätzlich zu den Containerfunktionen bereitzustellen, scheitern aus drei Gründen, und der Anwendungsfall von SI Kafka bestätigt dies alle von ihnen:
Nun zurück zu den Ergebnissen meines Shoot-Outs: Vor allem beeindruckt mich das Gesamtkonzept von Camels für Routen zwischen Endpunkten . Kafka fügt sich nahtlos in dieses Konzept ein und drei Konfigurationslinien reichen aus, um alles zum Laufen zu bringen. Probleme, die während des Prozesses auftreten, werden durch eine ausführliche Dokumentation des Projektteams sowie viele Fragen zu Stackoverflow sauber behoben. Last but not least gibt es eine umfassende Integration in den Frühling , die keine Wünsche unerfüllt lässt.
Mit SI im Gegenteil, die Dokumentation für die Kafka-Integration ist ziemlich intensiv und erklärt immer noch nicht klar, wie Kafka integriert werden soll. Die Integration von Kafka wird in die SI-Arbeitsweise gedrängt , was die Komplexität erhöht. Andere Dokumentationen, z. B. zu Stackoverflow, sind ebenfalls weniger umfangreich und weniger hilfreich als für Camel.
Mein Fazit: Schuster bleiben bei Ihrem Handel - verwenden Sie Spring als Container und Camel als Systemintegrations-Framework.
quelle
Es hängt wirklich davon ab, was Sie tun möchten. Wenn Sie etwas erweitern müssen, um Ihre eigene Messaging-Lösung zu erstellen, verfügt Spring Integration über das bessere Programmiermodell. Wenn Sie etwas benötigen, das viele Protokolle ohne benutzerdefinierten Code unterstützt, ist Camel Spring Integration voraus.
Eine kleine Schießerei ist eine sehr gute Idee. Stellen Sie nur sicher, dass Sie versuchen, die Art von Dingen zu tun, die Sie normalerweise im Projekt tun würden.
- Haftungsausschluss: Ich bin ein Spring Integration Committer
quelle
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 Auswirkung von Spring XD auf die Bereitstellung von Spring Integration-Anwendungen ohne Codekompilierung - auch Spring XD-Quellen und -Senken sind einfach Spring Integration-Kanaladapter, wenn Sie Spring XD erweitern möchten.
3.) Spring XD hat dazu geführt, dass Spring Integration, Spring Batch, Spring Data (+ Hadoop!) In einem Stapel vereinheitlicht wurden, wodurch die Stapel- und Stream-Verarbeitung, die Unterstützung von HDFS / Apache Hadoop und vieles mehr effektiv in Spring Integration integriert wurden.
4.) Die Auswirkungen des in Kürze veröffentlichten Spring Integration 4.0 Java DSL https://github.com/spring-projects/spring-integration-extensions/wiki/Spring-Integration-Java-DSL-Reference
Für Ihre Überlegung,
/ Pieter (Haftungsausschluss Ich arbeite bei Pivotal)
quelle
Wir verwenden Spring Integration für unsere Anwendung und erwägen nun, auf Apache Camel umzusteigen, da wir viele Probleme mit dem Spring Integration Framework hatten. Hier sind einige Probleme.
Die von Spring bereitgestellte CachingConnectionFactory öffnet Tausende von Leerlaufverbindungen in IBM MQ, und es gibt keine Garantie dafür, dass diese Verbindungen wiederverwendet werden. Und dennoch bleiben diese Verbindungen für immer offen, was zu Problemen auf der MQ-Seite führt. 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 hoch / runter zu gehen.
Spring bietet keine Mapper für QoS-Parameter. Selbst wenn Sie QoS aktivieren, gehen der Übermittlungsmodus und die Ablauf- / Zeitplan-Eigenschaften verloren (ich werde hierfür ein JIRA-Problem ansprechen). Apache Camel übernimmt dies und QoS-Parameter werden an Upstream-Anwendungen gesendet und nicht gelöscht.
Ich arbeite gerade an Problemen mit der Behandlung der Ausnahmen und Transaktionen mit Apache Camel, die Spring mit AOP besser zu behandeln schien.
quelle
Eigentlich würde ich sagen, dass FTP seine Inkubationszeit abgeschlossen hat. Sie können eine einfache Suche in SI-Foren / JIRA durchführen, um festzustellen, welche neuen Funktionen implementiert wurden und welche Fehler behoben wurden. Aus verschiedenen Gesprächen geht hervor, dass es bereits eine gewisse Produktionsnutzung gibt. Ich würde daher empfehlen, 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 Spring Integration Committer
quelle
Apache Camel ist ein sehr guter Rahmen und auch sehr vollständig. Wenn Ihre Anwendung jedoch Spring verwendet, ist mein persönlicher Rat, Spring Integration zu verwenden.
Spring Integration ist das Integrations-EIP-Beschwerde-Framework des Spring-Source-Ökosystems. Es ist hervorragend in das Ökosystem integriert: Spring Boot, Batch, XD; Sogar der Kern verwendet dieselbe Abstraktion ab Spring Framework 4. Ein Teil der Messaging-Abstraktion wurde in das Framework verschoben, um zu beweisen, dass die grundlegende Messaging-Abstraktion von Spring Integration sehr stark ist. Jetzt verwendet das Spring Framework beispielsweise die Messaging-Abstraktion für Spring Web, die 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 der 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, Spring Integration Java DSL für die Konfiguration zu verwenden. Ich verwende es für meine neuen Projekte und es fühlt sich lesbarer und klarer an. Ich hoffe, dass diese Überlegung Ihnen bei Ihren Bewertungen helfen kann.
quelle
Ein Grund für die Verwendung von Camel over Spring Integration ist, wenn Sie ein leistungsfähigeres EIP-Set benötigen. Spring Integration bietet keine Abstraktionen über Dinge wie ThreadPool.
Camel bietet zusätzliche Konstrukte, 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 Dateien, JMS, FTP-Endpunkte usw. verbinden möchten, verwenden Sie einfach Spring Integration.
quelle
Camel fungiert als Middleware für Anwendungen, in denen Datenmodellierung, Transformation von Nachrichtenwerten und Choreografie von Nachrichten durchgeführt werden können.
quelle
Wenn sich Ihre aktuelle Anwendung in Spring befindet und Funktionen erfordert, die von Spring Integration of EIP unterstützt werden, ist Spring Integration die beste Option. Andernfalls sind weitere Unterstützungen / Protokolle / Dateiformate usw. von Drittanbietern erforderlich
quelle