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:
- http://java.dzone.com/articles/spring-integration-and-apache (Perbandingan yang sangat netral antara penerapan skenario integrasi dunia nyata dalam Spring Integration vs. Camel, dari Desember 2009)
- http://hillert.blogspot.com/2009/10/apache-camel-alternatives.html (Membandingkan Camel dengan solusi lain, Oktober 2009)
- http://raibledesigns.com/rd/entry/taking_apache_camel_for_a (Matt Raible, Oktober 2008)
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.
Jawaban:
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.
sumber
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:
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?
sumber
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:
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.
sumber
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
sumber
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)
sumber
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.
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.
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.
sumber
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
sumber
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.
sumber
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.
sumber
Camel berperan sebagai middleware untuk aplikasi dimana seseorang dapat melakukan pemodelan data, transformasi nilai pesan dan koreografi pesan.
sumber
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
sumber