Spring Integration ile Deve ne zaman kullanılır?


138

Tecrübeli bir Bahar kullanıcısı olarak, Spring Integration'ın bazı (JMS) mesajlaşma yetenekleri ( daha fazla ayrıntı ) gerektiren son bir projede en anlamlı olacağını varsayıyordum . Spring Integration ile çalıştıktan birkaç gün sonra, bazı istek-yanıt (farklı JMS kuyruklarını dinleme) iletişimlerini yerine getirmek için yapılandırmanız gereken kanalların miktarı göz önüne alındığında, hala birçok yapılandırma yükü gibi geliyor.

Bu nedenle, Camel'in Spring Integration'dan nasıl farklı olduğuna dair bazı arka plan bilgileri arıyordum, ancak oldukça fazla bilgi var gibi görünüyor, buldum:

Soru şudur: Bir yığını diğerinin üzerinde kullanma konusunda ne deneyimler yaptınız? Hangi senaryolarda Deve'nin Bahar Entegrasyonundan yoksun olmasını öneriyorsunuz? Her birinin artılarını ve eksilerini nerede görüyorsunuz? Gerçek dünyadaki projelerin tavsiyeleri son derece takdir edilmektedir.


5
Camel'in Spring ile yaptığı müthiş entegrasyon göz önüne alındığında, Spring Integration'a bakmak için hiç iyi bir neden görmüyorum. Deve her alanda mükemmeldir: özlü, sezgisel, güçlü, ... eğlenceli. Tek bir kod satırı ile çok şey başarabilirsiniz, bazen işlevselliği haklı çıkarmak için yeterli kod yazmamaktan dolayı kendimi suçlu hissediyorum.
Pavel Lechev

Yanıtlar:


75

Akıcı API gerçekten güzel olduğu için Spring-Integration üzerinden Camel'i seçiyoruz. Aslında bunu Spring projelerinde kullanıyoruz ve bir kısmını yapılandırmak için Spring'i kullanıyoruz. Programlama API'leri açıktır ve çok sayıda hassas bileşen vardır.

Biz küçük ölçekli bir çatışmada yaptık ve temelde bizim gereksinimimiz için Camel kazandı. Genellikle dahili veri dosyalarını, genellikle ftp / sftp / ... kullanarak gönderen veya bir e-postaya ekleyip gönderen biçim dönüşümleri gerektiren harici taraflara / taraflardan aktarmak için kullanırız.

Edit-compile-debug döngüsünün azaldığını gördük. Rotaları kurmak için harika bir şekilde bonuslar eklenir.

Spring-Integration da harika bir ürün ve ihtiyaçlarımızı da karşılayacağından eminim.


1
Puanlarınızı paylaştığınız için teşekkürler Peter, hiç Camel'in JMS özelliklerini kullanmaya çalıştınız mı, ilgili bileşenler de oldukça esnek ve Spring Integration ile aynı zenginliğe sahip gibi görünüyor mu? "Küçük çaplı atışlar" ile daha iyi performans sayılarını mı ifade ediyorsunuz?
ngeek

1
Shootout: temel olarak geliştirici performansıydı. Performans ihtiyaçlarımız çok yüksek değil. Evet, temel olarak birçok JMS kullanıyoruz. Hem ActiveMQ hem de JBossMQ mesajlaşma için kullanılır.
Peter Tillemans


67

Spring Integration'ı yalnızca bir Spring projeniz varsa ve yalnızca File, FTP, JMS, JDBC vb. Kullanarak bazı "temel" entegrasyonlar eklemeniz gerekiyorsa öneririm.

Apache Camel'in iki ana avantajı vardır:

  1. Daha birçok teknoloji desteklenmektedir.
  2. Ayrıca, (iyi) bir XML DSL, Java, Groovy ve Scala için akıcı API'ler var.

Apache Camel, Spring ile çok iyi bir entegrasyona sahip olduğu için, çoğu Spring projesinde Spring Integration yerine onu bile kullanırım.

Daha fazla ayrıntıya ihtiyacınız varsa, blog yayınımdaki deneyimlerimi okuyabilirsiniz: Seçim için Şımarık: Hangi Entegrasyon Çerçevesi kullanılacak - Spring Integration, Mule ESB veya Apache Camel?


31

Kısa bir süre önce Apache Kafka'yı entegre etmek amacıyla bir Deve vs Spring Entegrasyonu çekimi yaptım . Hevesli Bahar geliştirici olmasına rağmen ne yazık ki Spring'in sürekli büyüyen Proje yığını ile benim şüphe doğruladı bulundu: IOC-Konteyner diğer çerçeve için tutkal olarak hizmet etmek olarak Bahar müthiş, ama uygun alternatifler sağlamayı başarısız için bu çerçeveler . Bunun istisnaları olabilir, yani Spring'in geldiği ve harika bir iş yaptığı MVC ile ilgili her şey olabilir, ancak konteyner özelliklerinin üstünde yeni işlevsellik sağlamaya yönelik diğer girişimler üç nedenden dolayı yetersiz kalıyor ve SI Kafka kullanım durumu onaylıyor hepsi:

  • XML yapılandırması için kullanımı zor bir DSL kullanımı.
  • Tüm çerçeve bileşenlerini kablolu olarak almak için xml-yapılandırma kodunun sayfaları.
  • Özel çerçevelerle eşit işlevsellik sağlamak için eksik kaynaklar.

Şimdi, atışımın sonuçlarına geri dönelim: en önemlisi, Develer'in uç noktalar arasındaki rota konseptinden çok etkilendim . Kafka bu konsepte sorunsuz bir şekilde entegre oluyor ve her şeyi çalıştırmak için üç konfigürasyon satırı yeterli. Süreç sırasında karşılaşılan sorunlar , proje ekibinin geniş dokümantasyonu ve Stackoverflow ile ilgili birçok soru ile düzgün bir şekilde ele alınmaktadır . Son fakat aynı derecede önemli olarak, Bahar'a hiçbir dileği yerine getirmeyen kapsamlı bir entegrasyon vardır .

Aksine SI, Kafka entegrasyonu için belgeler oldukça yoğundur ve Kafka'nın nasıl entegre edileceğini açık bir şekilde açıklayamamaktadır. Kafka'nın entegrasyonu, bir şeyler yapmanın SI yoluna bastırılır ve bu da ekstra karmaşıklık yaratır. Stackoverflow gibi diğer belgeler de Deve için olduğundan daha az bol ve daha az yardımcı olur.

Sonucum: ayakkabıcı ticaretinize sadık kalır - Spring'i konteyner olarak ve Camel'i sistem entegrasyon çerçevesi olarak kullanın.


3
Fritz, deneyimlerinizi paylaştığınız için teşekkürler! Gözlemlerinize yürekten katılıyorum: Deve, temel kavramları konusunda çok temiz ve aynı zamanda birçok görev için uygulanabilir bileşenlerin bir eko sistemini sağlıyor (belirli rutinleri özelleştirmek istiyorsanız kolayca takılmaya izin veriyor).
ngeek

15

Gerçekten ne yapmak istediğinize bağlı. Kendi mesajlaşma çözümünüzü oluşturmak için bir şeyi genişletmeniz gerekiyorsa Spring Integration daha iyi bir programlama modeline sahiptir. Özel kod olmadan birçok protokolü destekleyen bir şeye ihtiyacınız varsa Camel, Spring Integration'ın önünde.

Küçük ölçekli bir çekime sahip olmak çok iyi bir fikirdir, sadece projede yapacağınız şeyleri yapmaya çalıştığınızdan emin olun.

--disclaimer: Ben Bahar Entegrasyonu uzmanıyım


9

Gördüğüm Camel ve SI'nın çoğu karşılaştırması aşağıdakileri dikkate almaz:

1.) Spring Boot'un Spring Integration için geliştirici verimliliği üzerindeki etkisi

2.) Spring XD'nin Spring Integration uygulamalarını kod derlemesi olmadan kullanıma sunma üzerindeki etkisi - Spring XD kaynaklarını genişletmek istediğinizde Spring XD kaynakları ve lavaboları da sadece Spring Integration kanal adaptörleridir.

3.) Spring XD'nin etkisi, tek bir yığında birleştirici Bahar Entegrasyonu, Bahar Toplu, Bahar Verileri (+ Hadoop!) Yapma, toplu ve akış işleme, HDFS / Apache Hadoop desteği ve çok daha fazlasını Bahar Entegrasyonuna etkili bir şekilde getirdi.

4.) Yakında piyasaya sürülecek olan Bahar Entegrasyonu 4.0 Java DSL'in etkisi https://github.com/spring-projects/spring-integration-extensions/wiki/Spring-Integration-Java-DSL-Reference

İlginiz için,

/ Pieter (yasal uyarı Pivotal'da çalışıyorum)


3
Java DSL, dikkate alınmadan önce çok fazla çalışmaya ve daha da fazla belgeye ihtiyaç duyar.
cuttcards

Bir süre yayınlandı ... spring.io/blog/2014/11/24/…
Peter Szanto

6

Uygulamamız için Spring Integration kullanıyoruz ve şimdi Spring Integration çerçevesiyle ilgili birçok sorunla karşılaştığımızda Apache Camel'e geçmeyi düşünüyoruz. İşte birkaç konu.

  1. Spring'in sağladığı CachingConnectionFactory, IBM MQ'da 1000'lerin boşta bağlantı açar ve bu bağlantıların yeniden kullanıldığının garantisi yoktur. Ve yine de bu bağlantılar sonsuza kadar açık kalacak ve bu da MQ tarafında sıkıntılar yaratacak. Sadece bağlantıları yenilemek için düşük ortamlarda her hafta uygulamayı yeniden başlatmak zorunda kaldım. Apache Camel ayrıca Önbellekleme sağlar ve bağlantılar yüke bağlı olarak yukarı / aşağı gidiyor gibi görünür.

  2. Spring, QoS parametreleri için eşleyici sağlamaz. QoS'yi etkinleştirseniz bile, teslimat modu ve süre sonu / timetolive özellikleri kaybolacaktır (bunun için bir JIRA sorunu oluşturacağım). Apache Camel bunu ele alır ve QoS parametreleri akış yukarı uygulamalara gönderilir ve düşürülmez.

Şu anda Spring'in AOP ile daha iyi başa çıktığı Apache Camel ile istisnaları ve işlemleri ele alma konularında çalışıyorum.


IBM MQ'da açık rölanti bağlantılarına yol açan herhangi bir yanlış yapılandırma var mı?
Harpreet Sandhu - TheRootCoder

4

Aslında FTP'nin kuluçka dönemini bitirdiğini söyleyebilirim. Hangi yeni özelliklerin uygulandığını ve düzeltilen hataları görmek için SI forumlarında / JIRA'da basit bir arama yapabilirsiniz. Çeşitli konuşmacılardan, zaten bazı üretim kullanımları var gibi görünüyor, bu yüzden ikinci bir görünüm vermenizi ve elbette endişelerinizi bize iletmenizi öneririm.

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

Şerefe Oleg

Feragatname: Ben Bahar Entegrasyonu komisyoncuyum


4

Apache Camel çok iyi bir çerçeve ve çok eksiksiz. Ancak uygulamanız bahar kullanıyorsa, kişisel tavsiyem Bahar Entegrasyonu kullanmaktır.

Spring Integration, Spring-Source ekosisteminin entegrasyon EIP şikayet çerçevesidir. Ekosistem ile mükemmel entegrasyona sahiptir: Yaylı önyükleme, Batch, XD; çekirdek bile Spring Framework 4'ten başlayarak aynı soyutlamayı kullanıyor. Şimdi Spring framework örneğin Spring Web, web soket desteği için mesaj soyutlama kullanın.

Bir Bahar uygulamasında, Bahar entegrasyonu ile Apache Camel'i kullanmaya saygı duyan bir başka iyi şey, Bahar entegrasyonu ile sadece bir Uygulama Bağlamı kullanabilmenizdir. Deve Bağlamının bir Bahar bağlamı olduğunu unutmayın. Yeni bir Spring sürümü kullanma şansınız varsa, yapılandırma için Spring Integration Java DSL kullanmanızı öneririz. Yeni projelerimde kullanıyorum ve daha okunaklı ve net geliyor. Umarım bu yansıma değerlendirmelerinizde size yardımcı olabilir.


1

Spring Integration üzerinde Deve kullanmanın bir nedeni, daha özellikli bir EIP setine ihtiyaç duymanızdır. Spring Integration ThreadPool gibi şeyler üzerinde soyutlama sağlamaz.

Deve, eşzamanlı kodla çalışmanın bazı yönlerini basitleştirmek için ek yapılar sağlar:

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

Bu tür bir şeye ihtiyacınız yoksa ve sadece dosya, JMS, FTP uç noktaları vb.


2
Spring'den SI pollers ve görev yöneticilerinde ThreadPools'un kendileri hakkında bir soyutlama var. Yine de SI OOTB sizin için önceden yapılandırılmış değil. Burada yapılandırılan görev yürütücüsüne bakın: static.springsource.org/spring-integration/docs/2.1.x/reference/…
cwash

@Jon, lütfen JMS'teki yazıma bir göz atabilir misiniz
öğrenci

-1

Deve, veri modelleme, mesaj değerlerinin dönüşümü ve mesajların koreografisini gerçekleştirebilen uygulama için ara katman yazılımı görevi görür.


-3

Geçerli uygulamanız İlkbahar'daysa ve EIP'nin Bahar Entegrasyonu tarafından desteklenen özellikler gerektiriyorsa, Bahar Entegrasyonu, daha fazla üçüncü taraf desteği / protokol / dosya formatı vb.


Deve gerçekten Spring için büyük desteğe sahip ve birçok üçüncü taraf bileşeni kapsıyor.
MikeHoss
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.