Коли використовувати Spring Integration vs. Camel?


138

Як досвідчений користувач Spring, я припускав, що інтеграція Spring отримає найбільше значення в нещодавньому проекті, який потребує деяких можливостей обміну повідомленнями (JMS) ( докладніше ). Після декількох днів роботи з Spring Integration все ще відчувається велика кількість конфігурації, враховуючи кількість каналів, які потрібно налаштувати, щоб забезпечити деякий зв’язок на запит (відповідь на різні черги JMS).

Тому я шукав деяку довідкову інформацію про те, чим верблюд відрізняється від весняної інтеграції, але, схоже, інформація там є досить запасною, я знайшов:

Питання: який досвід ви використовували, використовуючи один стек над іншим? У яких сценаріях ви б порекомендували Camel, коли весняна інтеграція не мала підтримки Де ви бачите плюси та мінуси кожного? Будь-які поради з реальних проектів високо оцінені.


5
Враховуючи абсолютно дивовижну інтеграцію, яку має Camel із Spring, я не бачу жодної вагомої причини навіть дивитися на Spring Integration. Верблюд відмінне в будь-якій області: лаконічний, інтуїтивний, потужний, ... веселий. Ви можете зробити так багато за допомогою одного рядка коду, що іноді я відчуваю себе винним за те, що не написав достатньо коду, щоб виправдати функціональність.
Павло Лечев

Відповіді:


75

Ми вибираємо верблюда над Spring-Integration, оскільки вільний API дуже приємний. Ми фактично використовуємо його у проектах Spring, а Spring використовуємо для налаштування частини. API програмування зрозумілі і є великий набір чутливих компонентів.

Ми зробили невелику перестрілку в масштабі і в основному в той час за нашою вимогою виграв верблюд. Ми використовуємо його головним чином для передачі внутрішніх файлів даних до / від зовнішніх сторін, що зазвичай вимагає перетворення формату, надсилаючи їх за допомогою ftp / sftp / ... або приєднуючи його до електронного листа та відправляючи його.

Ми виявили, що цикл редагування-збирання-налагодження зменшений. Використовуючи groovy для експерименту зі створення маршрутів, додаються бонуси.

Spring-Integration - це також чудовий продукт, і я впевнений, що він задовольнить і наші потреби.


1
Дякую Петру за те, що ви поділилися своїми балами, чи намагалися ви коли-небудь використовувати можливості JMS Camel? Здається, відповідні компоненти також досить гнучкі і мають таке ж багатство, як Spring Integration? Під "перестрілкою в малих масштабах" ви посилаєтесь на кращі показники продуктивності?
ngeek

1
Перестрілка: це були переважно продуктивність розробників. Наші потреби в продуктивності не дуже високі. Так, ми використовуємо багато JMS як основу. І ActiveMQ, і JBossMQ використовуються для обміну повідомленнями.
Пітер Тіллеманс

ви можете подивитися stackoverflow.com/questions/46930494/… ?
gstackoverflow

67

Я рекомендую весняну інтеграцію лише в тому випадку, якщо у вас вже є проект Spring і вам просто потрібно додати якусь "базову" інтеграцію за допомогою File, FTP, JMS, JDBC тощо.

Верблюд Apache має дві основні переваги:

  1. Багато, багато інших технологій підтримуються.
  2. Крім того, (хороший) XML DSL, є вільні API для Java, Groovy та Scala.

Оскільки Apache Camel має дуже гарну інтеграцію із Spring, я б навіть використав її замість Spring Integration у більшості проектів весни.

Якщо вам потрібні додаткові деталі, ви можете прочитати мій досвід у моєму дописі блогу: Spoiled for Choice: Яку інтеграційну систему використовувати - Spring Integration, Mule ESB або Apache Camel?


31

Нещодавно я проводив перестрілку «Верблюда проти весняної інтеграції» з метою інтегрувати Apache Kafka . Незважаючи на те , завзятий розробник Spring, я , до жаль , знайшов моє підозра з постійно зростаючим стеком проекту Spring підтвердив: Spring є дивним , як МОК-Container , щоб служити в якості клею для інших рамок, але вона не в забезпеченні життєздатних альтернатив в цих рамках . З цього можуть бути винятки, а саме все, що стосується MVC, звідки прийшла Spring і де вона робить велику роботу, але інші спроби надати нову функціональність поверх функцій контейнерів затримані з трьох причин, і випадок використання SI Kafka підтверджує усі:

  • Впровадження тривалої складної у використанні DSL для XML-конфігурації.
  • Сторінки коду конфігурації xml, щоб отримати доступ до всіх компонентів рамки.
  • Відсутні ресурси для забезпечення функціональності нарівні із виділеними рамками.

Тепер повернемось до результатів моєї зйомки: найголовніше мене вразила загальна концепція верблюдів маршрутів між кінцевими точками . Kafka безперешкодно інтегрується в цю концепцію, і три лінії конфігурації достатньо для того, щоб все встигати. Проблеми, що виникають під час процесу, акуратно вирішуються великою документацією від проектної групи , а також великою кількістю питань щодо Stackoverflow. І останнє, але не менш важливе, є всебічна інтеграція до Весни яка не залишає бажання невиконаними.

Що стосується СІ, навпаки, документація щодо інтеграції Kafka досить інтенсивна і досі не дозволяє чітко пояснити, як інтегрувати Kafka. Інтеграція Кафки натиснута в СІ-спосіб здійснення речей, що додає додаткової складності. Інша документація, наприклад, про Stackoverflow, також менш рясна і менш корисна, ніж для верблюда.

Мій висновок: павутинка дотримується вашої торгівлі - використовуйте Spring як контейнер і Camel як систему системної інтеграції.


3
Дякую, Фріц, за те, що ти поділився своїм досвідом! Я від щирого серця погоджуюся з вашими спостереженнями: Camel дуже чіткий щодо своїх основних понять, а також забезпечує екосистему життєздатних компонентів для багатьох підручних завдань (відповідно дозволяє легко підключитися, якщо ви хочете налаштувати конкретні процедури).
ngeek

15

Це дійсно залежить від того, що ви хочете зробити. Якщо вам потрібно розширити щось для створення власного рішення для обміну повідомленнями, Spring Integration має кращу модель програмування. Якщо вам потрібно щось, що підтримує безліч протоколів без спеціального коду, Camel випереджає Spring Integration.

Перестрілка невеликого масштабу - дуже хороша ідея, просто переконайтеся, що ви намагаєтеся робити тип речей, які ви зазвичай робите в проекті.

- відмова: Я ведучий весняної інтеграції


9

Більшість порівнянь, які я бачив верблюдів та сімей, не враховують:

1.) Вплив Spring Boot на продуктивність розробника для Spring Integration

2.) Ефект Spring XD мав на тому, щоб зробити програми Spring Integration доступними без компіляції коду - також джерела та джерела Spring XD - це просто адаптери каналу Spring Integration, коли ви хочете розширити Spring XD.

3.) Ефект Spring XD мав на об'єднанні інтеграції Spring, Spring Batch, Spring Data (+ Hadoop!) В один стек, ефективно приносячи пакетну та потокову обробку, підтримку HDFS / Apache Hadoop та багато іншого для Spring Integration.

4.) Ефект скоро випущеної Spring Integration 4.0 Java DSL https://github.com/spring-projects/spring-integration-extensions/wiki/Spring-Integration-Java-DSL-Reference

На ваш розгляд,

/ Пітер (відмова я працюю в Pivotal)


3
Java DSL потребує великої роботи та ще більше документації, перш ніж її врахувати.
cuttcards

Він виходить на деякий час ... spring.io/blog/2014/11/24/…
Peter Szanto

6

Ми використовуємо Spring Integration для нашої програми і тепер розглядаємо можливість перейти до Apache Camel, оскільки у нас виникло багато проблем із Spring Integration Framework. Ось пара питань.

  1. CachingConnectionFactory, який надає Spring, відкриває 1000 з простою з'єднань у IBM MQ, і немає гарантії, що ці з'єднання будуть використані повторно. І все одно ці зв’язки залишатимуться відкритими назавжди, що створює проблеми на стороні MQ. Довелося перезавантажувати програму щотижня в нижчих середовищах, щоб оновити з'єднання. Apache Camel також забезпечує кешування, і з'єднання, схоже, йдуть вгору / вниз залежно від навантаження.

  2. Spring не забезпечує відображення параметрів QoS. Навіть якщо ви ввімкнете QoS, режим доставки та властивості закінчення / тайметоліві втрачаються (я збираюся порушити проблему JIRA для цього). Apache Camel обробляє це, а параметри QoS надсилаються до додаткових програм та не скидаючи його.

Зараз я працюю над питаннями щодо вирішення винятків та трансакцій з Apache Camel, які, схоже, Spring справляються з AOP.


Чи була якась неправильна конфігурація, яка призвела до відкритих простоїв у IBM MQ.
Harpreet Sandhu - TheRootCoder

4

Власне, я б сказав, що FTP закінчив свій інкубаційний період. Ви можете виконати простий пошук на форумах SI / JIRA, щоб побачити, які нові функції були реалізовані та помилки, які виправлені. З-за різних балачок схоже, що виробництво вже існує, тому я б запропонував ще раз поглянути і, звичайно, повідомити нам свої проблеми через

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

Ура, Олег

Відмова від відповідальності: Я є весільним комітетом інтеграції


4

Верблюд Apache - це дуже хороший каркас і теж дуже повний. Але якщо у вашій програмі використовується весна, моя особиста порада - використовувати Spring Integration.

Весняна інтеграція - це інтеграційна система подання скарг EIP екосистеми Spring-Source. Він має чудову інтеграцію з екосистемою: весняний черевик, Batch, XD; навіть ядро ​​використовує ту саму абстракцію, починаючи з Spring Framework 4. Деякі абстракції повідомлень були переміщені в рамках, як доказ того, що основна абстракція обміну повідомленнями Spring Integration дуже сильна. Тепер у Spring Framework, наприклад, використовується абстракція повідомлень для Spring Web, підтримка веб-сокета.

Ще одна добра річ у програмі Spring з інтеграцією Spring щодо використання Apache Camel - це те, що при Spring інтеграції ви можете використовувати лише один контекст програми. Пам’ятайте, що контекст верблюда - це контекст весни. якщо у вас є можливість використовувати нову версію Spring, пропоную використовувати для конфігурації Spring Integration Java DSL. Я використовую це у своїх нових проектах, і він відчуває себе більш зрозумілим та зрозумілим. Я сподіваюся, що ця рефлексія може допомогти вам у ваших оцінках.


1

Однією з причин використовувати верблюда над весняною інтеграцією - коли вам потрібен більш функціональний набір EIP. Весняна інтеграція не дає абстракцій щодо таких речей, як ThreadPool.

Camel пропонує додаткові конструкції для спрощення деяких аспектів роботи з одночасним кодом:

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

Якщо у вас немає подібних речей, а ви просто хочете підключити файли, JMS, кінцеві точки FTP тощо ..., просто використовуйте Spring Integration.


2
У вас є абстракція щодо самих ThreadPools у SI-опитувачах та виконавцях завдань з Spring. Ніщо не заздалегідь налаштоване для вас OOTB в СІ. Див. Виконавець завдання, налаштований тут: static.springsource.org/spring-integration/docs/2.1.x/reference/…
cwash

@Jon, чи можете ви, будь ласка, подивіться на мій пост про JMS
учень

-1

Верблюд виступає як програмне забезпечення для додатків, де можна проводити моделювання даних, перетворення значень повідомлень та хореографію повідомлень.


-3

Якщо ваша поточна заявка весна та потребує функцій, які підтримуються весняною інтеграцією EIP, тоді Spring Integration є найкращим варіантом, ще потрібні більше сторонніх підтримки / протоколів / форматів файлів тощо


Верблюд справді має чудову підтримку весни і охоплює безліч сторонніх компонентів.
MikeHoss
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.