Quand utiliser Spring Integration vs. Camel?
en tant qu'utilisateur expérimenté de Spring, je supposais que L'intégration de Spring aurait le plus de sens dans un projet récent nécessitant des capacités de messagerie (JMS) ( plus de détails ). Après quelques jours de travail avec Spring Integration, il semble qu'il y ait encore beaucoup de problèmes de configuration étant donné la quantité de canaux que vous devez configurer pour apporter quelques communications request-response (écoute sur différentes files D'attente JMS) en place.
donc j'étais à la recherche de quelques informations de base sur la façon dont Camel est différent de L'intégration de printemps, mais il semble que l'information là-bas sont assez de rechange, j'ai trouvé:
- http://java.dzone.com/articles/spring-integration-and-apache (comparaison très neutre entre la mise en œuvre d'un scénario d'intégration dans le monde réel dans Spring Integration vs. Camel, à partir de décembre 2009)
- http://hillert.blogspot.com/2009/10/apache-camel-alternatives.html (Comparaison de Chameau avec d'autres solutions, octobre 2009)
- http://raibledesigns.com/rd/entry/taking_apache_camel_for_a (Matt Raible, octobre 2008)
la Question Est: quelles expériences avez-vous faites en utilisant l'une pile sur l'autre? Dans quels scénarios recommanderiez-vous Camel si Spring Integration manquait de soutien? Où voyez-vous avantages et inconvénients de chacun? Tous les conseils des projets du monde réel sont très appréciés.
10 réponses
nous préférons le chameau à L'intégration de ressorts parce que L'API fluent est vraiment agréable. Nous l'utilisons dans les projets Spring et utilisons Spring pour configurer une partie de celui-ci. Les API de programmation sont claires et il y a un grand nombre de composants sensibles.
nous avons fait une fusillade à petite échelle et essentiellement à ce moment-là pour notre Chameau exigence gagné. Nous l'utilisons principalement pour transférer des fichiers de données internes vers / depuis des parties externes qui nécessitent généralement des conversions de format. en utilisant ftp/sftp/... ou la joindre à un e-mail et l'envoyer.
nous avons trouvé le cycle edit-compile-debug réduit. En utilisant groovy pour expérimenter la mise en place des routes sont des bonus supplémentaires.
Spring-intégration est un excellent produit aussi, et je suis tout à fait sûr qu'il satisferait nos besoins aussi.
Je ne recommande L'intégration de printemps que si vous avez déjà un projet de printemps et que vous avez juste à ajouter une intégration" de base " en utilisant le fichier, FTP, JMS, JDBC, et ainsi de suite.
Apache Camel a deux avantages principaux:
- beaucoup, beaucoup plus de technologies sont prises en charge.
- en outre, un (bon) XML, il y a couramment des API pour Java, Groovy et Scala.
parce que le chameau Apache a très bonne intégration avec Spring, Je l'utiliserais même à la place si L'intégration de Spring dans la plupart des projets de printemps.
si vous avez besoin de plus de détails, vous pouvez lire mes expériences dans mon blog: Spoilt for Choice: quel cadre D'intégration utiliser – Spring Integration, Mule ESB ou Apache Camel?
j'ai récemment mené un shoot-out D'intégration Camel vs Spring dans le but d'intégrer Apache Kafka . En dépit d'être un développeur de printemps avide, j'ai tristement trouvé mon soupçon avec le projet en croissance constante pile de printemps confirmé: printemps est génial comme IOC-conteneur pour servir de colle pour d'autres cadres, mais il ne parvient pas à fournir des alternatives viables à ces cadres . Il pourrait y avoir des exceptions à cette règle, à savoir: tout à voir avec MVC, D'où vient le ressort et où il fait un excellent travail, mais d'autres tentatives pour fournir une nouvelle fonctionnalité en plus des caractéristiques du conteneur sont en panne pour trois raisons et le si Kafka cas d'utilisation confirme tous les:
- Introduction d'une version longue et difficile à utiliser DSL pour la configuration XML.
- Pages de code de configuration xml pour obtenir tous les composants du framework câblé.
- manque de ressources pour fournir la fonctionnalité sur un pied d'égalité avec les cadres dédiés.
maintenant, retour aux résultats de mon shoot-out: plus important encore, je suis impressionné par le concept global de Camels de routes between endpoints . Kafka s'intègre parfaitement à ce concept et trois lignes de configuration suffisent pour que tout soit opérationnel. Les problèmes rencontrés au cours du processus sont soigneusement abordés par documentation abondante de l'équipe du projet ainsi que beaucoup de questions sur Stackoverflow. Enfin et surtout, il y a un intégration complète dans le printemps qui ne laisse aucun souhait non réalisé.
avec SI au contraire, la documentation pour l'intégration de Kafka est assez intense et ne parvient toujours pas à expliquer clairement comment intégrer Kafka. L'intégration de Kafka est pressé dans la SI-façon de faire les choses, ce qui ajoute une complexité supplémentaire. D'autres documents, par exemple sur Stackoverflow, sont également moins abondants et moins utiles que pour le chameau.
ma conclusion: cordonnier coller à votre commerce - utiliser le ressort comme un conteneur et le Chameau comme cadre d'intégration de système.
je dépend vraiment de ce que vous voulez faire. Si vous avez besoin d'étendre quelque chose pour construire votre propre solution de messagerie, Spring Integration a le meilleur modèle de programmation. Si vous avez besoin de quelque chose qui prend en charge de nombreux protocoles sans code personnalisé, Camel est en avance sur L'intégration de printemps.
avoir une fusillade à petite échelle est une très bonne idée, assurez-vous juste que vous essayez de faire le type de choses que vous feriez généralement dans le projet.
--disclaimer: je suis un Printemps de l'Intégration committer
la plupart des comparaisons de Camel et SI que j'ai vu ne tiennent pas compte de ce qui suit:
1.) L'effet que le Printemps de Démarrage a eu sur la productivité des développeurs pour le Printemps de l'Intégration
2.) L'effet de Spring XD a eu sur la mise à disposition D'applications D'intégration de ressorts sans compilation de code - les sources et les éviers de Spring XD sont aussi simplement des adaptateurs de canaux D'intégration de ressorts, lorsque vous cherchez à étendre Spring XD.
3. L'effet de Ressort XD a eu sur la fabrication d'unifier le Printemps de l'Intégration, Spring Batch, Spring Data (+Hadoop!) en une seule pile, apportant efficacement le traitement par lots et en flux, le support HDFS/Apache Hadoop, et bien plus encore à L'intégration de printemps.
4. L'effet de la bientôt-à-être-publié Printemps Intégration 4.0 Java DSL https://github.com/spring-projects/spring-integration-extensions/wiki/Spring-Integration-Java-DSL-Reference
pour votre considération,
/Pieter (avertissement, je travaille au Pivot)
en fait, je dirais que le FTP a augmenté sa période d'incubation. Vous pouvez faire une recherche simple sur si forums/JIRA pour voir quelles nouvelles fonctionnalités ont été implémentées et quels bugs ont été corrigés. De différents bavardages, il semble qu'il y a déjà une certaine utilisation de production en dehors de cela, donc je suggère de donner un deuxième regard et bien sûr communiquer vos préoccupations à nous via
http://forum.springsource.org/forumdisplay.php?42-Integration
https://jira.springsource.org/browse/INT
santé Oleg
Avertissement: je suis Spring Integration committer
nous utilisons Spring Integration pour notre application et envisageons maintenant de passer à Apache Camel car nous avons rencontré beaucoup de problèmes avec Spring Integration framework. Voici quelques problèmes.
-
le cache Connectionfactory que le ressort fournit ouvre 1000 de connexions inactives dans IBM MQ et il n'y a aucune garantie que ces connexions sont réutilisées. Et pourtant ces connexions resteront ouvertes pour toujours ce qui crée des problèmes sur le MQ côté. Dû redémarrer l'application chaque semaine en basse environnements juste pour actualiser les connexions. Apache Camel fournit également la mise en cache et les connexions semblent monter/descendre en fonction de la charge.
-
le Printemps n'est pas de fournir des mappeurs pour les paramètres de QoS. Même si vous activez QoS, le mode de livraison et les propriétés expiration/timetolive seront perdus (je vais soulever un problème JIRA pour cela). Apache Camel gère cela et les paramètres QoS sont envoyés à des applications en amont et ne pas les laisser tomber.
je suis en train de travailler sur des questions concernant le traitement des exceptions et des transactions avec Apache Camel qui ressort semble mieux gérer avec AOP.
Apache Camel est un très bon cadre et très complet, mais si l'utilisation de votre application ressort mon conseil personnel est de revenir à l'intégration de printemps. L'intégration de printemps est le cadre d'intégration des plaintes liées à L'EIP de L'écosystème de source printanière. Il a une très bonne intégration avec l'écosystème: botte de printemps, Batch, XD, même le noyau utilisent la même abstraction à partir de Spring Framework 4 certains de l'abstraction de messagerie ont été déplacés dans le cadre comme preuve que la base l'abstraction de messagerie de L'intégration de printemps sont très forts, Maintenant cadre de printemps par exemple utiliser l'abstraction de messagerie pour le Web de printemps, prise en charge de socket. Une autre bonne chose dans une application de ressort avec intégration de ressort à l'égard de L'utilisation D'Apache Camel est que, avec intégration de ressort, vous ne pouvez utiliser Qu'une seule Application Contecxt. Rappelez-vous que le contexte Camel est un contexte de printemps. si vous avez la chance d'utiliser une nouvelle version de printemps je peux suggérer d'utiliser L'intégration de printemps Java dsl pour configuration. Je l'utilise sur mes nouveaux projets et je me sens plus lisible et plus claire.
j'espère que cette reflectin peut vous aider pour vos évaluations
une des raisons d'utiliser Camel over Spring Integration est quand vous avez besoin d'un ensemble EIP plus featureful. Spring Integration ne fournit pas d'Abstraction sur des choses telles que ThreadPool.
le Chameau ne fournir d'autres constructions de cette simplification de certains aspects de l'utilisation simultanée de code:
http://camel.apache.org/camel-23-threadpool-configuration.html
Si vous n'avez pas besoin de ce genre de chose et juste vouloir connecter le fichier, JMS, FTP endpoints etc... alors utilisez L'intégration de printemps.
si votre application actuelle est au printemps et nécessitent des fonctionnalités qui sont prises en charge par L'intégration de printemps de L'EIP alors L'intégration de printemps est la meilleure option sinon nécessitent plus de prise en charge de tiers/protocoles/formats de fichiers etc