Что такое Apache Camel? - PullRequest
       154

Что такое Apache Camel?

1267 голосов
/ 13 января 2012

Я не понимаю, что именно делает Верблюд .

Если бы вы могли дать 101 слово введение в Верблюд:

  • Что именно?
  • Как это взаимодействует с приложением, написанным на Java?
  • Это что-то, что идет вместе с сервером?
  • Это независимая программа?

Пожалуйста, объясните, что такое верблюд.

Ответы [ 22 ]

1054 голосов
/ 18 июля 2012

Мое предположение, чтобы описать это более доступным способом ...

Чтобы понять, что такое Apache Camel, вам необходимо понять, что такое шаблоны корпоративной интеграции.

Давайте начнем с того, что мы, по-видимому, уже знаем: паттерн Singleton, паттерн Factory и т. Д .; Это всего лишь способы организации вашего решения проблемы, но сами они не являются решениями. Эти паттерны были проанализированы и извлечены для остальных из нас Бандой четырех, когда они опубликовали свою книгу: Шаблоны проектирования . Они избавили некоторых из нас от огромных усилий, чтобы придумать, как лучше структурировать наш код.

Подобно «Банде четырех», Грегор Хопе и Бобби Вулф создали книгу Шаблоны интеграции предприятия (EIP), в которой они предлагают и документируют набор новых шаблонов и чертежи для как мы могли бы наилучшим образом проектировать большие системы на основе компонентов, где компоненты могут работать в одном и том же процессе или на другом компьютере.

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

Так что же такое Apache Camel?

Apache Camel предлагает вам интерфейсы для EIP, базовых объектов, часто используемых реализаций, инструментов отладки, системы конфигурации и многих других помощников, которые сэкономят вам массу времени, когда вы захотите внедрить свое решение, чтобы следовать EIPs.

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

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

652 голосов
/ 13 января 2012

Если у вас есть от 5 до 10 минут, я обычно рекомендую людям прочитать это Интеграция с Apache Camel Джонатаном Ансти. Это хорошо написанная часть, которая дает краткое введение и обзор некоторых концепций Camel, а также реализует пример использования с примерами кода. В нем Джонатан пишет:

Apache Camel - это инфраструктура Java с открытым исходным кодом, которая делает интеграцию проще и доступнее для разработчиков. Это достигается путем предоставления:

  • конкретные реализации всех широко используемых корпоративных шаблонов интеграции (EIP)
  • подключение к большому количеству транспортов и API
  • простые в использовании доменные языки (DSL) для соединения EIP и транспорта вместе

Существует также бесплатная глава Верблюд в действии , в которой вводится Верблюд в первой главе. Джонатан является соавтором этой книги со мной.

647 голосов
/ 31 мая 2012

Создание описания проекта не должно быть сложным.

Я говорю:

Apache Camel - это технология обмена сообщениями, связанная с маршрутизацией.Он объединяет начальную и конечную точки обмена сообщениями, позволяя передавать сообщения из разных источников в разные места назначения.Например: JMS -> JSON, HTTP -> JMS или воронка FTP -> JMS, HTTP -> JMS, JSON -> JMS

Википедия говорит:

ApacheCamel - это механизм маршрутизации и посредничества, основанный на правилах, который предоставляет реализацию шаблонов интеграции предприятия на основе объектов Java с использованием API (или декларативного языка, специфичного для домена Java) для настройки правил маршрутизации и передачи.Специфичный для домена язык означает, что Apache Camel может поддерживать интеллектуальное завершение правил маршрутизации в вашей среде IDE с безопасным типом, используя обычный код Java без огромного количества файлов конфигурации XML;хотя конфигурация XML внутри Spring также поддерживается.

Видите?Это было не сложно, правда?

115 голосов
/ 05 июня 2013

Короче говоря:

Когда требуется подключить / интегрировать системы, вам, вероятно, потребуется подключиться к какому-либо источнику данных, а затем обработать эти данные в соответствии с требованиями вашего бизнеса.

Для этого:

1) Вы можете разработать специальную программу, которая будет делать это (может быть трудоемким и трудным для понимания, сопровождение для другого разработчика)

2) В качестве альтернативы, вы можете использовать Apache Camel, чтобы сделать это стандартизированным способом (он имеет большинство уже разработанных для вас разъемов, вам просто нужно настроить его и подключить свою логику - называемую Process):

Верблюд поможет вам:

  1. Использование данных из любого источника / формата
  2. Обработать эти данные
  3. Вывод данных в любой источник / формат

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

Apache Camel разработан с использованием корпоративных шаблонов интеграции. Шаблоны помогут вам правильно интегрировать системы: -)

84 голосов
/ 28 апреля 2017

Верблюд отправляет сообщения от А до Б:

enter image description here

Зачем целая основа для этого? Ну, что, если у вас есть:

  • много отправителей и много получателей
  • дюжина протоколов (ftp, http, jms и т. Д.)
  • много сложных правил
    • Отправить сообщение A только получателям A и B
    • Отправить сообщение B получателю C в виде XML , но частично перевести it, обогатить it (добавить метаданные) и IF условие X , затем отправьте его получателю D, но как CSV .

Так что теперь вам нужно:

  • перевод между протоколами
  • клей компоненты вместе
  • определить маршруты - что идет куда
  • фильтр некоторые вещи в некоторых случаях

Верблюд дает вам выше (и больше) из коробки:

enter image description here

с классным языком DSL для вас, чтобы определить, что и как:

  new DefaultCamelContext().addRoutes(new RouteBuilder() {
        public void configure() {
            from("jms:incomingMessages")
                    .choice() // start router rules
                    .when(header("CamelFileName")
                            .endsWith(".xml"))
                    .to("jms:xmlMessages")
                    .when(header("CamelFileName")
                            .endsWith(".csv"))
                    .to("ftp:csvMessages");
}

См. Также это и это и "Верблюд в действии" (как говорили другие, отличная книга!)

73 голосов
/ 27 декабря 2014

Диаграмма лучше, чем тысячи описания.Эта диаграмма иллюстрирует архитектуру Camel.

enter image description here

50 голосов
/ 13 апреля 2015

НА ОСНОВЕ АНАЛОГИИ

Маршрут на верблюде можно легко понять, поставив себя на место владельца Авиакомпании (например, American Airlines, Jet Airways).

Цель вашей авиакомпании состоит в том, чтобы «перевозить» пассажиров из одного «города» в другой в мире. Для перевозки пассажиров вы используете самолеты разных «авиационных компаний», таких как Boeing, Airbus, HAL.

Ваша авиакомпания регистрирует пассажиров, используя «аэропорты» города, и высылает их, используя аэропорт города. Пассажир может «путешествовать» по нескольким городам, но везде он должен проезжать через аэропорт, чтобы путешествовать между самолетом вашей авиакомпании и городом.

Обратите внимание, что пассажир, «вылетающий» из города, по сути, «прибывает» в самолет вашей авиакомпании. И прохожий, «прибывающий» в город, по сути отходит от самолета. Так как мы находимся в шкуре владельца авиакомпании, термины «прибывающий пассажир» и «уходящий пассажир» перевернуты из наших традиционных представлений, которые основаны на перспективе города.

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

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

Кроме того, ваша авиакомпания также предоставляет комнаты отдыха для специальных процедур, таких как «понимание местного языка» или подготовка вас к «путешествию».

Позволяет заменить несколько слов / фраз, использованных выше, следующим:

ваша авиакомпания: Apache Camel

авиационные компании: Транспортные механизмы

самолет вашей авиакомпании: основной транспортный механизм Apache Camel

нести: маршрут

пассажиров: сообщение;

город: система;

аэропорт: Camel Component;

понимание местных языков: преобразования типов;

отправление: производство, производство

прибывающих: потребляющих, потребляемых

путешествие: по маршруту

удобства: предоставляются

После замены слов вот что вы получите:

Цель «Apache Camel» - направить «сообщения» из одной «системы» в другую в мире. Верблюд Apache использует различные транспортные механизмы для маршрутизации сообщений.

Apache Camel собирает сообщения с использованием «Компонента на основе верблюда» системы «от» и отбрасывает их с помощью «Компонента на основе верблюда» системы «до». Сообщение может направляться в несколько систем, но везде они должны проходить через «Компоненты на основе Camel», чтобы перемещаться между «базовым транспортным механизмом Apache Camel» и системой.

Обратите внимание, что сообщение, "созданное" из системы, по сути "потребляется" в базовый транспортный механизм Apache Camel ". А сообщение, потребляемое системой, по сути, создается базовым транспортным механизмом Apache Camel.

Поскольку мы пытаемся понять верблюда, мы должны думать с точки зрения верблюда здесь и далее. Таким образом, значения терминов «сообщение потребителя» и «сообщение производителя» полностью противоположны нашим традиционным представлениям, которые основаны на ракурсе системы.

Та же инфраструктура кодирования «Компонент на основе верблюда» используется «сообщениями-производителями» и «сообщениями-потребителями». «Компонент на основе верблюда» предоставляет «конечную точку производителя» для «сообщения производителя» и «конечную точку потребителя» для «сообщения потребителя».

Сообщения могут обрабатываться Camel во время их маршрутизации.

Помимо этой маршрутизации Camel предоставляет специальные функции, такие как «Преобразование типов» и многие другие ...

48 голосов
/ 13 января 2012

Прежде чем пытаться понять Apache Camel, вам необходимо понять, что такое шаблоны корпоративной интеграции.Не все в этой области на самом деле знают о них.Хотя вы, безусловно, можете прочитать книгу «Шаблоны интеграции предприятия», более быстрый способ освоить их - прочитать что-то вроде статьи в Википедии о Интеграция корпоративных приложений .

Когда вы прочитали и поняли предметную область, вы, скорее всего, поймете цель Apache Camel

HTH

34 голосов
/ 13 января 2012

Если вам известны шаблоны интеграции предприятия, Apache Camel - это одна инфраструктура интеграции, которая реализует все EIP.

И вы можете развернуть Camel как отдельное приложение в веб-контейнере.

По сути, если вам нужно интегрировать несколько приложений с разными протоколами и технологиями, вы можете использовать Camel.

22 голосов
/ 16 марта 2013

Определение с другой точки зрения:

Apache Camel - это интегрированная среда.Он состоит из нескольких библиотек Java, которые помогут вам реализовать проблемы интеграции на платформе Java.Что это означает и чем оно отличается от API с одной стороны и Enterprise Service Bus (ESB) с другой стороны, описано в моей статье " Когда использовать Apache Camel "

...