Что такое Apache Camel?

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

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

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

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

20 ответов


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

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

  • конкретные реализации всех широко используемых Модели Интеграции Предприятия (EIPs)
  • подключение к большому разнообразию транспортов и API
  • простой в использовании домен конкретных языков (DSLs) для проводов EIPs и транспортов вместе

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


мой взгляд, чтобы описать это более доступным способом...

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

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

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

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

Итак, что такое Apache Верблюд?

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

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

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


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

Я говорю:

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

в Википедии написано:

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

посмотреть? Это не трудно было?


короче:

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

для этого:

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

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

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

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

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

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


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

enter image description here


верблюд отправляет сообщения от A до B:

enter image description here

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

  • многие отправители и многие приемники
  • десяток протоколов (ftp, http, jms, etc.)
  • много сложных правил
    • Отправить сообщение A приемникам A и B только
    • Отправить сообщение B получателю c в xml-файле, но частично перевести он, обогащение it (добавить метаданные) и если условие 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");
}

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


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

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

HTH


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

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

цель "вашей авиакомпании" - "перевозить" пассажиров "из одного" города " в другой в мире. Вы используете самолеты из разных "авиационных компаний", таких как Boeing, Airbus, HAL для перевозки пассажиров.

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

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

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

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

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

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

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

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

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

carry: route

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

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

аэропорт: компонент верблюда;

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

отъезд: производство, производство

прибытие: потребление, потребление

travel: routed

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

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

назначение ' Apache Верблюд!--18--> - это маршрутизация "сообщений" из одной "системы" в другую в мире. Apache camel использует различные транспортные механизмы для маршрутизации сообщений.

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

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

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

та же "инфраструктура кодирования компонента на основе верблюда "используется" сообщением производителя " и "сообщением потребителя". А верблюд компонент является производителем конечной точки' для 'message производителя" и "потребителя конечной точки" для "потребителя сообщения'.

сообщения могут обрабатываться верблюдом, когда они маршрутизируются.

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


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

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

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


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

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


что именно?

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

вы можете использовать Java, Spring XML, Scala или Groovy. Почти каждая технология, которую вы можете себе представить, доступна, например HTTP, FTP, JMS, EJB, JPA, RMI, JMS, JMX, LDAP, Netty и т. д.

есть посмотри на это!--13-->статьи и EIP шаблон статьи

как он взаимодействует с приложением, написанным на языке Java?

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

Java DSL - DSL на основе Java с использованием стиля fluent builder.

в история шаблона интеграции предприятия решается вокруг этих понятий:

сообщение, конечная точка, производитель, потребитель, маршрутизация, Шина, преобразование и процесс.

посмотри статьи Анирбан Конар для одного из случаев использования в реальном времени.

Это что-то, что идет вместе с сервером?

он действует как мост через несколько подсистем предприятия.

это независимая программа?

Apache Camel, платформа интеграции, интегрирует различные независимые приложения.

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


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

Camel-это Java-оболочка / API для промежуточного программного обеспечения между приложениями.

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

Это то, что верблюд, в нижней части. Мы можем дополнить описание, отметив, что оно обеспечивает промежуточное ПО типа EIP.

Он не предоставляет само промежуточное программное обеспечение, так как он не может знать детали того, что приложения должны общаться. Но он предоставляет API для создания инвариантных частей это промежуточное ПО (создайте начальную точку, создайте конечную точку, создайте условия для начала и окончания и т. д.)

надеюсь, это поможет.


вот еще одна попытка.

вы знаете, как есть/были такие вещи, как Webmethods, ICAN Seebeyond, Tibco BW, IBM Broker. Все они помогли с интеграционными решениями на предприятии. Эти инструменты широко известны под названием Enterprise Application Integration (EAI) tools.

в основном были инструменты перетаскивания, построенные вокруг этих технологий, и частично вам придется писать адаптеры на Java. Этот код адаптера был либо непроверенным, либо имел плохой инструменты/автоматизация вокруг тестирования.

Так же, как с шаблонами проектирования в программировании, у вас есть шаблоны интеграции предприятия для общих интеграционных решений. Они прославились благодаря одноименной книге Грегора Хоп и Бобби Вульфа.

хотя вполне возможно реализовать интеграционные решения, которые используют один или несколько EIP, Camel-это попытка сделать это в вашей базе кода, используя один из XML, Java, Groovy или Scala.

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

таким образом, Camel является конкурирующим technoloy с другими инструментами EAI с лучшей поддержкой для тестирования кода интеграции. Код является кратким из-за специфичных для домена языков (DSL). Он читается даже бизнес-пользователями, и это бесплатно и делает вас продуктивным.


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

большинство распространенных проблем имеют проверенные решения, называемые шаблонами проектирования. Шаблон проектирования для обмена сообщениями-это шаблоны корпоративной интеграции (EIPs), которые хорошо объяснены здесь. Apache camel поможет нам реализовать наше решение с помощью EIPs.

прочность рамок интеграции своя способность облегчите нам через EIPs или другие шаблоны, количество транспортов и компонентов и простоту разработки, на которой Apache camel стоит в верхней части списка

каждый из фреймворков имеет свои преимущества некоторые из особенностей Apache camel являются следующие.

  1. он обеспечивает кодирование во многих DSLs, а именно Java DSL и Spring xml на основе DSL, которые популярны.
  2. простота в использовании и прост в использовании.
  3. предохранитель IDE является продукт, который поможет вам кодировать через UI

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

чтобы дать вам перспективу, Java DSL, приведенный ниже, создаст конечную точку REST, которая сможет принять XML, состоящий из списка продуктов, и разделить его на несколько продуктов и вызвать метод процесса BrandProcessor с ним. И просто добавляя .parallelProcessing (обратите внимание на закомментированную часть) он будет параллельно обрабатывать все объекты продукта. (Класс продукта JAXB/XJC сгенерированный Java-заглушка из XSD, к которому ограничен входной xml.) Этот код (наряду с несколькими зависимостями Camel) выполнит работу, которая раньше занимала 100 строк кода Java.

from("servlet:item-delta?matchOnUriPrefix=true&httpMethodRestrict=POST")
.split(stax(Product.class))
/*.parallelProcessing()*/
.process(itemDeltaProcessor);

после добавления идентификатора маршрута и оператора регистрации

from("servlet:item-delta?matchOnUriPrefix=true&httpMethodRestrict=POST")
.routeId("Item-DeltaRESTRoute")
.log(LoggingLevel.INFO, "Item Delta received on Item-DeltaRESTRoute")
.split(stax(Product.class))
.parallelProcessing()
.process(itemDeltaProcessor);

Это просто образец, верблюд гораздо больше, чем просто конечная точка отдыха. Просто взгляните на список подключаемых компонентов http://camel.apache.org/components.html


Camel помогает в маршрутизации, преобразовании, мониторинге.

Он использует маршруты; которые можно описать как:

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

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


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

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


на предприятии существует ряд систем различных типов. Некоторые из них могут быть устаревшими системами, а некоторые-новыми. Эти системы часто взаимодействуют друг с другом и нуждаются в интеграции. Это взаимодействие или интеграция не так просто, как реализации систем, их форматы сообщений могут отличаться. Один из способов достичь этого-реализовать код, который устраняет эти различия. Однако это будет точечная интеграция. Если завтра снова, если есть изменения в системе другой также может быть изменен, что нехорошо. Вместо этой интеграции точка-точка, которая вызывает плотную связь, мы можем реализовать дополнительный слой до посредничать различия между системами. Это приводит к слабой связи и не влияет на наши существующие системы. Apache Camel-это основанный на правилах механизм маршрутизации и передачи, который предоставляет объектную реализацию Java шаблонов корпоративной интеграции с использованием API (или декларативного домена Java Конкретный язык) для настройки правил маршрутизации и передачи.
Подробное объяснение и примеры можно найти здесь Apache Camel Учебники


Apache Camel-это Java-платформа для корпоративной интеграции. Например: - если вы создаете веб-приложение, которое взаимодействует со многими поставщиками API, мы можем использовать camel в качестве инструмента внешней интеграции. Мы можем сделать больше, основываясь на прецеденте. Camel in Action от Manning publications-отличная книга для изучения верблюда. Интеграции можно определить следующим образом.

JAVA DSL

from("jetty://0.0.0.0:8080/searchProduct").routeId("searchProduct.products").threads()
    .log(LoggingLevel.INFO, "searchProducts request Received with body: ${body}")
    .bean(Processor.class, "createSearchProductsRequest").removeHeaders("CamelHttp*")
    .setHeader(Exchange.HTTP_METHOD, constant(org.apache.camel.component.http4.HttpMethods.POST))
    .to("http4://" + preLiveBaseAPI + searchProductsUrl + "?apiKey=" + ApiKey
                    + "&bridgeEndpoint=true")
    .bean(Processor.class, "buildResponse").log(LoggingLevel.INFO, "Search products finished");

Это просто создать конечную точку API REST, которая в свою очередь вызывает внешний API и отправляет запрос обратно

Весна DSL

<route id="GROUPS-SHOW">
    <from uri="jetty://0.0.0.0:8080/showGroups" />
    <log loggingLevel="INFO" message="Reqeust receviced service to fetch groups -> ${body}" />
    <to uri="direct:auditLog" />
    <process ref="TestProcessor" />
</route>

приходя к вашим вопросам

  1. что именно? Ans: - это фреймворк, который реализует шаблоны интеграции предприятия
  2. как он взаимодействует с приложением, написанным на языке Java? Ans: - он может взаимодействовать с любыми доступными протоколами, такими как http, ftp, amqp и т. д.
  3. это то, что идет вместе с сервером? Ans: - он может быть развернут в контейнер, как tomcat или может быть развернут независимо как процесс java
  4. это независимая программа? Анс: - может быть.

надеюсь, что это помогает


это как трубопровод, соединяющий

From---->To

между u можно добавить столько каналов и труб. Кран может быть любого типа автоматический или ручной для потока данных и направлять поток.

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

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

-from-->To
   - from-->process-->to
   - from-->bean-->to
   - from-->process-->bean-->to
   -from-->marshal-->process-->unmarshal-->to

From/to - - - - - folder, direct, seda, vm может быть что угодно