Когда использовать Spring Integration против Camel? - PullRequest
125 голосов
/ 14 июня 2010

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

Поэтому я искал некоторую справочную информацию о том, чем Camel отличается от Spring Integration, но кажется, что информация там довольно скудная, я нашел:

Вопрос: какой опыт вы получили при использовании одного стека над другим?В каких сценариях вы бы порекомендовали Camel, если Spring Integration не имеет поддержки?Где вы видите плюсы и минусы каждого?Любые советы от реальных проектов высоко ценятся.

Ответы [ 10 ]

65 голосов
/ 14 июня 2010

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

Мы провели небольшую перестрелку и в то время, по нашему требованию, победил Верблюд.Мы используем его в основном для передачи внутренних файлов данных внешним сторонним организациям, которые обычно требуют преобразования формата, отправляя его с использованием ftp / sftp / ... или прикрепляя его к электронному письму и отправляя его.цикл компиляции-отладки уменьшен.Использование groovy для экспериментов по настройке маршрутов добавляет бонусы.

Spring-Integration также отличный продукт, и я уверен, что он также удовлетворит наши потребности.

61 голосов
/ 11 января 2012

Я рекомендую Spring Integration только в том случае, если у вас уже есть проект Spring, и вам нужно просто добавить некоторую «базовую» интеграцию, используя File, FTP, JMS, JDBC и так далее.

Apache Camel имеет два основных преимущества:

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

Поскольку Apache Camel имеет очень хорошую интеграцию с Spring, я бы даже использовал его вместо Spring Integration в большинстве проектов Spring.

Если вам нужна дополнительная информация, вы можете прочитать мой опыт в моем блоге: Избранный для выбора: какую интеграционную платформу использовать - Spring Integration, Mule ESB или Apache Camel?

25 голосов
/ 21 июля 2015

Я недавно провел перестрелку Camel vs Spring Integration с целью интеграции Apache Kafka . Несмотря на то, что я был заядлым разработчиком Spring, я с грустью обнаружил, что мое подозрение в отношении постоянно растущего стека проектов Spring подтверждается: Spring великолепен в качестве IOC-контейнера, служащего связующим звеном для других сред, но ему не удается предоставить жизнеспособные альтернативы эти рамки . Могут быть исключения из этого, а именно все, что связано с MVC, откуда пришел Spring и где он отлично справляется, но другие попытки предоставить новые функциональные возможности поверх функций контейнера терпят неудачу по трем причинам и сценарий использования SI Kafka подтверждает их все:

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

Теперь вернемся к результатам моей перестрелки: самое главное, я впечатлен общей концепцией Camels маршрутов между конечными точками . Kafka легко интегрируется с этой концепцией, и для ее запуска достаточно трех линий конфигурации. Проблемы, возникшие в ходе процесса, аккуратно решены в обширной документации от команды проекта , а также во многих вопросах о Stackoverflow. И последнее, но не менее важное: существует полная интеграция в Spring , которая не оставляет желаний невыполненными.

С SI, напротив, документация для интеграции Kafka довольно интенсивна и все еще не может объяснить, как интегрировать Kafka. Интеграция Kafka нажата в SI-способ ведения дел, что добавляет дополнительную сложность. Другая документация, например на Stackoverflow также менее изобильный и менее полезный, чем для Camel.

Мой вывод: сапожник придерживается вашей профессии - используйте Spring в качестве контейнера и Camel в качестве основы системной интеграции.

14 голосов
/ 18 июня 2010

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

Хорошая идея - небольшая перестрелка, просто убедитесь, что вы пытаетесь делать то,как правило, вы делаете в проекте.

- отказ от ответственности: я приверженец Spring Integration

9 голосов
/ 21 октября 2014

Большинство сравнений Camel и SI, которые я видел, не учитывают следующее:

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

2.) Влияние Spring XD сказалось на доступности приложений Spring Integration без компиляции кода - также источники и приемники Spring XD - это просто адаптеры каналов Spring Integration, если вы хотите расширить Spring XD.

3.) Эффект Spring XD оказал влияние на объединение Spring Integration, Spring Batch, Spring Data (+ Hadoop!) В один стек, эффективно объединяя пакетную и потоковую обработку, поддержку HDFS / Apache Hadoop и многое другое для Весенняя интеграция.

4.) Эффект от скоро выпускаемой Spring Integration 4.0 Java DSL https://github.com/spring-projects/spring-integration-extensions/wiki/Spring-Integration-Java-DSL-Reference

На ваше рассмотрение,

/ Питер (отказ от ответственности, я работаю на Pivotal)

5 голосов
/ 29 июня 2017

Мы используем Spring Integration для нашего приложения и сейчас планируем перейти на Apache Camel, так как столкнулись с множеством проблем со средой Spring Integration. Вот пара вопросов.

  1. CachingConnectionFactory, предоставляемый Spring, открывает тысячи незанятых соединений в IBM MQ, и нет никакой гарантии, что эти соединения будут использованы повторно. И все же эти связи останутся открытыми навсегда, что создает проблемы на стороне MQ. Приходилось перезапускать приложение каждую неделю в более низких средах, чтобы просто обновить соединения. Apache Camel также обеспечивает кэширование, и соединения, похоже, увеличиваются / уменьшаются в зависимости от нагрузки.

  2. Spring не предоставляет картографы для параметров QoS. Даже если вы включите QoS, режим доставки и свойства expiration / timetolive будут потеряны (я собираюсь поднять проблему JIRA для этого). Apache Camel обрабатывает это, и параметры QoS отправляются в восходящие приложения и не удаляются.

Сейчас я работаю над проблемами обработки исключений и транзакций с Apache Camel, которые Spring, похоже, лучше справляется с AOP.

4 голосов
/ 25 мая 2011

На самом деле, я бы сказал, что FTP завершил инкубационный период.Вы можете выполнить простой поиск на форумах SI / JIRA, чтобы увидеть, какие новые функции были реализованы и исправлены ошибки.Судя по разным болтовням, кажется, что уже есть какое-то использование в производстве, поэтому я бы посоветовал ему еще раз взглянуть на него и, конечно, сообщить нам о своих проблемах через

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

Приветствия, Олег

Отказ от ответственности: я являюсь коммиттером Spring Integration

2 голосов
/ 12 марта 2016

Apache Camel - очень хорошая структура и очень полная. Но если ваше приложение использует Spring, мой личный совет - использовать Spring Integration.

Spring Integration - это интегрированная среда жалоб EIP в экосистеме Spring-Source. Отличная интеграция с экосистемой: Spring boot, Batch, XD; даже ядро ​​использует ту же абстракцию, начиная с Spring Framework 4. Некоторые из абстракций обмена сообщениями были перемещены в фреймворк в качестве доказательства того, что базовая абстракция обмена сообщениями в Spring Integration очень сильна. Теперь Spring Framework, например, использует абстракцию обмена сообщениями для Spring Web, поддержку веб-сокетов.

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

1 голос
/ 16 февраля 2012

Одной из причин использования Camel поверх Spring Integration является необходимость в более функциональном наборе EIP.Spring Integration не предоставляет абстракций для таких вещей, как ThreadPool.

Camel предоставляет дополнительные конструкции для этого, упрощая некоторые аспекты работы с параллельным кодом:

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

Если вам не нужны такие вещи и вы просто хотите подключить файл, JMS, конечные точки FTP и т. Д., Тогда просто используйте Spring Integration.

0 голосов
/ 21 ноября 2013

Если ваше текущее приложение находится в Spring и требует функций, которые поддерживаются Spring Integration EIP, тогда Spring Integration является лучшим вариантом, если требуется больше сторонних поддерживаемых / протоколов / форматов файлов и т. Д.

...