Когда использовать Spring Интеграция против Camel?

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

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

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

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

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

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

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

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

Ответ 4

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

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

- отказ от ответственности: я Spring Коммиттер интеграции

Ответ 5

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

1.) Эффект, который Spring Boot имел на производительность разработчика для Spring Интеграция

2.) Эффект Spring XD оказал на создание приложений интеграции Spring без компиляции кода - также Spring Источники и приемники XD - это просто Spring Адаптеры каналов интеграции, когда вы смотрите для расширения Spring XD.

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

4.) Эффект скоро появляющегося Spring Integration 4.0 Java DSL https://github.com/spring-projects/spring-integration-extensions/wiki/Spring-Integration-Java-DSL-Reference

Для вашего рассмотрения

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

Ответ 6

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

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

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

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

Ответ 7

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

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

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

Отказ от ответственности: я Spring Коммиттер интеграции

Ответ 8

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 для конфигурации. Я использую это в моих новых проектах, и это чувствует себя более читабельным и ясным. Я надеюсь, что это отражение поможет вам в ваших оценках.

Ответ 9

Одна из причин использования Camel над Spring Интеграция - это когда вам нужен более функциональный набор EIP. Spring Интеграция не обеспечивает абстракции над такими вещами, как ThreadPool.

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

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

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

Ответ 10

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

Ответ 11

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