Когда использовать Spring Integration против Camel?

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

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

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

10 ответов


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

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

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

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


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

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

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

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

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


недавно я провел Camel vs Spring Integration shoot-out с целью интеграции Апач Кафка. Несмотря на то, что я заядлый разработчик Spring, я с грустью обнаружил, что мое подозрение с постоянно растущим стеком проектов Spring подтвердилось:Весна удивительна, как IoC-контейнер, чтобы служить клеем для других рамок, но она не может обеспечить жизнеспособные альтернативы до эти рамки. Могут быть исключения из этого, а именно все, что связано с MVC, где Весна пришла из и где она делает большую работу, но другие попытки обеспечить новую функциональность поверх функций контейнера не хватает для три причины и Си Кафка прецедент подтверждает все из них:

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

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

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

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


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

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

--отказ от ответственности: я Весна Integration committer


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

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

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

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

4.) Влияние скоро-к-быть-выпущенной интеграции весны 4.0 Java DSL https://github.com/spring-projects/spring-integration-extensions/wiki/Spring-Integration-Java-DSL-Reference

для рассмотрения

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


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

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

Ура Олег!--1-->

отказ от ответственности: я Spring Integration committer


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

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

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

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


Apache Camel-очень хорошая структура и очень полная, но если ваше приложение использует spring, мой личный совет-вернуться к весенней интеграции. Весенняя интеграция-это интеграционная структура EIP-жалобы экосистемы Spring-Source. Он имеет очень хорошую интеграцию с экосистемой: Spring boot, Batch, XD, даже ядро использует ту же абстракцию, начиная с Spring Framework 4 некоторые абстракции обмена сообщениями были перемещены в рамках в качестве доказательства того, что основной обмен сообщениями абстракция весенней интеграции очень сильна, теперь Spring framework, например, использует абстракцию обмена сообщениями для Spring Web, поддержку веб-сокетов. Еще одна хорошая вещь в весеннем приложении с весенней интеграцией в отношении использования Apache Camel заключается в том, что с весенней интеграцией вы можете использовать только одно приложение Contecxt. Помните, что контекст верблюда-это весенний контекст. если у вас есть возможность использовать новую версию Spring, я могу предложить использовать Spring Integration java dsl для конфигурации. Я использую это на моих новых проектах, и я чувствую себя более читаемым и понятным.

Я надеюсь, что этот рефлектин может помочь вам для ваших оценок


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

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

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

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


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