Kapan menggunakan Integrasi Musim Semi vs. Unta?

142

Sebagai pengguna Spring berpengalaman, saya berasumsi bahwa Spring Integration paling masuk akal dalam proyek baru-baru ini yang membutuhkan beberapa kemampuan pengiriman pesan (JMS) ( lebih detail ). Setelah beberapa hari bekerja dengan Spring Integration, masih terasa seperti banyak overhead konfigurasi mengingat jumlah saluran yang harus Anda konfigurasikan untuk membawa beberapa komunikasi permintaan-respons (mendengarkan pada antrian JMS yang berbeda) di tempat.

Oleh karena itu saya mencari beberapa informasi latar belakang bagaimana Camel berbeda dari Integrasi Musim Semi, tetapi sepertinya informasi di luar sana cukup banyak, saya menemukan:

Pertanyaannya adalah: pengalaman apa yang Anda dapatkan saat menggunakan satu tumpukan di atas tumpukan lainnya? Dalam skenario apa Anda akan merekomendasikan Unta jika Integrasi Musim Semi tidak memiliki dukungan? Di mana Anda melihat pro dan kontra masing-masing? Setiap saran dari proyek dunia nyata sangat dihargai.

ngeek
sumber
5
Mengingat integrasi yang benar-benar luar biasa yang dimiliki Camel dengan Spring, saya tidak melihat alasan yang baik sama sekali untuk melihat Integrasi Musim Semi. Unta unggul di segala bidang: ringkas, intuitif, kuat, ... menyenangkan. Anda dapat mencapai banyak hal dengan satu baris kode, sehingga terkadang saya merasa bersalah karena tidak menulis cukup kode untuk membenarkan fungsinya.
Pavel Lechev

Jawaban:

78

Kami memilih Camel daripada Spring-Integration karena fasih API sangat bagus. Kami benar-benar menggunakannya dalam proyek Spring dan menggunakan Spring untuk mengkonfigurasi sebagian darinya. API pemrogramannya jelas dan ada sekumpulan besar komponen yang masuk akal.

Kami melakukan baku tembak skala kecil dan pada dasarnya pada saat itu untuk kebutuhan kami, Camel menang. Kami menggunakannya terutama untuk mentransfer file data internal ke / dari pihak eksternal yang biasanya memerlukan konversi format, mengirimkannya menggunakan ftp / sftp / ... atau melampirkannya ke email dan mengirimkannya.

Kami menemukan siklus edit-kompilasi-debug berkurang. Menggunakan groovy untuk percobaan pengaturan rute ditambahkan bonus.

Spring-Integration juga merupakan produk hebat, dan saya yakin itu akan memenuhi kebutuhan kita juga.

Peter Tillemans
sumber
1
Terima kasih Peter yang telah membagikan poin Anda, apakah Anda pernah mencoba menggunakan kemampuan JMS Camel, sepertinya masing-masing komponen juga cukup fleksibel dan memiliki kekayaan yang sama dengan Integrasi Musim Semi? Dengan "baku tembak skala kecil" Anda mengacu pada angka kinerja yang lebih baik?
ngeek
1
Adu penalti: itu terutama kinerja pengembang. Kebutuhan kinerja kami tidak terlalu tinggi. Ya, kami menggunakan banyak JMS sebagai basis. Baik ActiveMQ dan JBossMQ digunakan untuk olahpesan.
Peter Tillemans
dapatkah Anda melihat stackoverflow.com/questions/46930494/… ?
gstackoverflow
70

Saya hanya merekomendasikan Integrasi Spring jika Anda sudah mendapatkan proyek Spring dan Anda baru saja menambahkan beberapa integrasi "dasar" menggunakan File, FTP, JMS, JDBC, dan sebagainya.

Apache Camel memiliki dua keunggulan utama:

  1. Banyak, lebih banyak lagi teknologi yang didukung.
  2. Selain itu, XML DSL (bagus), ada API yang lancar untuk Java, Groovy, dan Scala.

Karena Apache Camel memiliki integrasi yang sangat baik dengan Spring, saya bahkan akan menggunakannya sebagai pengganti Spring Integration di sebagian besar proyek Spring.

Jika Anda membutuhkan lebih banyak detail, Anda dapat membaca pengalaman saya di posting blog saya: Spoiled for Choice: Kerangka Integrasi mana yang digunakan - Integrasi Musim Semi, Mule ESB atau Apache Camel?

Kai Wähner
sumber
32

Saya baru-baru ini melakukan baku tembak Integrasi Unta vs Musim Semi dengan tujuan untuk mengintegrasikan Apache Kafka . Meskipun merupakan pengembang Musim Semi yang rajin, sayangnya saya menemukan kecurigaan saya dengan tumpukan Proyek Spring yang terus berkembang dikonfirmasi: Spring sangat mengagumkan karena IOC-Container berfungsi sebagai lem untuk kerangka kerja lain, tetapi gagal memberikan alternatif yang layak untuk kerangka kerja tersebut . Mungkin ada pengecualian untuk ini, yaitu segala sesuatu yang berkaitan dengan MVC, dari mana Spring berasal dan di mana Spring bekerja dengan baik, tetapi upaya lain untuk menyediakan fungsionalitas baru di atas fitur container gagal karena tiga alasan dan kasus penggunaan SI Kafka mengonfirmasi mereka semua:

  • Pengenalan yang bertele-tele sulit untuk menggunakan DSL untuk konfigurasi XML.
  • Halaman kode konfigurasi xml untuk menghubungkan semua komponen kerangka kerja.
  • Sumber daya yang hilang untuk menyediakan fungsionalitas yang setara dengan kerangka kerja khusus.

Sekarang, kembali ke hasil tembak-menembak saya: yang terpenting, saya terkesan dengan konsep keseluruhan Camels tentang rute antar titik akhir . Kafka terintegrasi secara mulus dengan konsep ini dan tiga baris konfigurasi sudah cukup untuk menjalankan semuanya. Masalah yang dihadapi selama proses ditangani dengan rapi oleh dokumentasi yang cukup dari tim proyek serta banyak pertanyaan tentang Stackoverflow. Last but not least, ada integrasi komprehensif ke Spring yang tidak membuat keinginan tidak terpenuhi.

Sebaliknya dengan SI, pendokumentasian integrasi Kafka cukup intens dan masih belum dapat menjelaskan secara jelas bagaimana mengintegrasikan Kafka. Integrasi Kafka ditekankan ke dalam cara SI dalam melakukan sesuatu, yang menambah kompleksitas ekstra. Dokumentasi lain, misalnya tentang Stackoverflow juga kurang banyak dan kurang bermanfaat dibandingkan dengan Camel.

Kesimpulan saya: tukang sepatu tetap berpegang pada perdagangan Anda - gunakan Spring sebagai wadah dan Unta sebagai kerangka integrasi sistem.

Fritz Duchardt
sumber
3
Terima kasih, Fritz, telah membagikan pengalaman Anda! Saya sepenuhnya setuju dengan pengamatan Anda: Unta sangat bersih mengenai konsep dasarnya serta menyediakan ekosistem komponen yang layak untuk banyak tugas yang ada (resp. Memungkinkan untuk terhubung dengan mudah jika Anda ingin menyesuaikan rutinitas tertentu).
ngeek
17

Itu sangat tergantung pada apa yang ingin Anda lakukan. Jika Anda perlu memperluas sesuatu untuk membangun solusi perpesanan Anda sendiri, Spring Integration memiliki model pemrograman yang lebih baik. Jika Anda memerlukan sesuatu yang mendukung banyak protokol tanpa kode khusus, Camel lebih maju dari Integrasi Musim Semi.

Memiliki baku tembak skala kecil adalah ide yang sangat bagus, pastikan Anda mencoba melakukan hal-hal yang biasanya Anda lakukan dalam proyek tersebut.

--disclaimer: Saya adalah pelaku Integrasi Musim Semi

iwein
sumber
9

Kebanyakan perbandingan Unta dan SI yang pernah saya lihat tidak memperhitungkan hal-hal berikut:

1.) Pengaruh Spring Boot terhadap produktivitas developer untuk Integrasi Spring

2.) Efek Spring XD telah membuat aplikasi Spring Integration tersedia tanpa kompilasi kode - juga sumber dan sink Spring XD hanyalah adaptor saluran Spring Integration, saat Anda ingin memperluas Spring XD.

3.) Efek Spring XD telah membuat Integrasi Spring, Spring Batch, Spring Data (+ Hadoop!) Dalam satu tumpukan, secara efektif menghadirkan pemrosesan batch dan streaming, dukungan HDFS / Apache Hadoop, dan banyak lagi ke Integrasi Spring.

4.) Pengaruh Spring Integration 4.0 Java DSL yang akan segera dirilis https://github.com/spring-projects/spring-integration-extensions/wiki/Spring-Integration-Java-DSL-Reference

Sebagai bahan pertimbangan,

/ Pieter (penafian Saya bekerja di Pivotal)

PivotalPieter
sumber
3
Java DSL membutuhkan banyak pekerjaan dan bahkan lebih banyak dokumentasi sebelum harus diperhitungkan.
cuttcards
Ini dirilis untuk sementara waktu sekarang ... spring.io/blog/2014/11/24/…
Peter Szanto
6

Kami menggunakan Spring Integration untuk aplikasi kami dan sekarang mempertimbangkan untuk pindah ke Apache Camel karena kami mengalami banyak masalah dengan framework Spring Integration. Berikut ini beberapa masalah.

  1. CachingConnectionFactory yang disediakan Spring membuka 1000 koneksi idle di IBM MQ dan tidak ada jaminan bahwa koneksi ini digunakan kembali. Dan tetap saja koneksi ini akan tetap terbuka selamanya yang menciptakan masalah di sisi MQ. Harus me-restart aplikasi setiap minggu di lingkungan yang lebih rendah hanya untuk menyegarkan koneksi. Apache Camel juga menyediakan Caching dan koneksi tampaknya naik / turun berdasarkan beban.

  2. Spring tidak menyediakan pembuat peta untuk parameter QoS. Bahkan jika Anda mengaktifkan QoS, mode pengiriman dan properti kedaluwarsa / jadwal akan hilang (saya akan mengangkat masalah JIRA untuk ini). Apache Camel menangani ini dan parameter QoS dikirim ke aplikasi upstream dan tidak menjatuhkannya.

Saya sekarang sedang mengerjakan masalah dengan penanganan pengecualian dan transaksi dengan Apache Camel yang tampaknya ditangani Spring lebih baik dengan AOP.

Selvakumar
sumber
Apakah ada kesalahan konfigurasi yang menyebabkan koneksi idle terbuka di IBM MQ.
Harpreet Sandhu - TheRootCoder
4

Sebenarnya menurut saya FTP sudah tamat masa inkubasinya. Anda dapat melakukan pencarian sederhana di forum SI / JIRA untuk melihat fitur baru apa yang telah diterapkan dan bug yang telah diperbaiki. Dari berbagai obrolan sepertinya sudah ada penggunaan produksi darinya, jadi saya sarankan untuk melihatnya kedua dan tentu saja menyampaikan kekhawatiran Anda kepada kami melalui

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

Cheers Oleg

Penafian: Saya adalah pelaku Integrasi Musim Semi

Oleg Zhurakousky
sumber
4

Apache Camel adalah kerangka kerja yang sangat bagus dan juga sangat lengkap. Tetapi jika aplikasi Anda menggunakan spring, saran pribadi saya adalah menggunakan Spring Integration.

Integrasi Musim Semi adalah kerangka pengaduan EIP integrasi ekosistem Sumber Mata Air. Ini memiliki integrasi yang sangat baik dengan ekosistem: Spring boot, Batch, XD; bahkan intinya menggunakan abstraksi yang sama mulai dari Spring Framework 4. Beberapa abstraksi pesan dipindahkan dalam kerangka kerja, sebagai bukti bahwa abstraksi pesan dasar dari Spring Integration sangat kuat. Sekarang kerangka kerja Spring misalnya menggunakan abstraksi perpesanan untuk Spring Web, dukungan web socket.

Hal baik lainnya dalam aplikasi Spring dengan integrasi Spring sehubungan dengan penggunaan Apache Camel adalah dengan integrasi Spring, Anda hanya dapat menggunakan satu Konteks Aplikasi. Ingatlah bahwa Konteks Unta adalah konteks Musim Semi. jika Anda memiliki kesempatan untuk menggunakan versi Spring baru, saya sarankan untuk menggunakan Spring Integration Java DSL untuk konfigurasi. Saya menggunakannya pada proyek baru saya, dan rasanya lebih mudah dibaca dan jelas. Saya berharap refleksi ini dapat membantu evaluasi Anda.

Valerio Vaudi
sumber
1

Salah satu alasan untuk menggunakan Camel over Spring Integration adalah saat Anda membutuhkan set EIP yang lebih lengkap. Integrasi Musim Semi tidak memberikan abstraksi atas hal-hal seperti ThreadPool.

Camel memang memberikan konstruksi tambahan untuk menyederhanakan beberapa aspek bekerja dengan kode bersamaan:

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

Jika Anda tidak memerlukan hal semacam ini dan hanya ingin menghubungkan file, JMS, endpoint FTP dll ... maka gunakan saja Spring Integration.

Jon
sumber
2
Anda memiliki abstraksi atas ThreadPools sendiri di poller SI dan pelaksana tugas dari Spring. Tidak ada yang dikonfigurasi sebelumnya untuk Anda OOTB di SI. Lihat tugas pelaksana dikonfigurasi di sini: static.springsource.org/spring-integration/docs/2.1.x/reference/...
cwash
@Jon, dapatkah Anda melihat postingan saya di JMS
pelajar
-1

Camel berperan sebagai middleware untuk aplikasi dimana seseorang dapat melakukan pemodelan data, transformasi nilai pesan dan koreografi pesan.

sudhirkondle
sumber
-3

Jika aplikasi Anda saat ini ada di Spring dan memerlukan fitur yang didukung oleh Spring Integration of EIP maka Spring Integration adalah pilihan terbaik selain itu memerlukan lebih banyak dukungan pihak ketiga / protokol / format file dll

Venkata Parvatam
sumber
Unta sangat mendukung Musim Semi dan mencakup banyak komponen pihak ketiga.
MikeHoss