Вопрос: Что такое Apache Camel?


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

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

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

Пожалуйста, объясните, что такое Camel.


1113


источник


Ответы:


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

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

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

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


582



Я хочу описать это более доступным способом ...

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

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

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

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

Итак, что такое Apache Camel?

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

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

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


905



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

Я говорю:

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

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

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

Видеть? Это было не сложно?


633



In short:

When there is a requirement to connect / integrate systems, you will probably need to connect to some data source and then process this data to match your business requirements.

In order to do that:

1) You could develop custom program that would do it (might be time consuming and hard to understand, maintain for other developer)

2) Alternatively, you could use Apache Camel to do it in standardised way (it has most of the connectors already developed for you, you just need to set it up and plug your logic - called Process):

Camel will help you to:

  1. Consume data from any source/format
  2. Process this data
  3. Output data to any source/format

By using Apache Camel you will make it easy to understand / maintain / extend your system to another developer.

Apache Camel is developed with Enterprise Integration Patterns. The patterns help you to integrate systems in a good way :-)


105



A diagram is better than thousands of description. This Diagram illustrates the architecture of Camel.

enter image description here


66



Camel sends messages from A to B:

enter image description here

Why a whole framework for this? Well, what if you have:

  • many senders and many receivers
  • a dozen of protocols (ftp, http, jms, etc.)
  • many complex rules
    • Send a message A to Receivers A and B only
    • Send a message B to Receiver C as XML, but partly translate it, enrich it (add metadata) and IF condition X, then send it to Receiver D too, but as CSV.

So now you need:

  • translate between protocols
  • glue components together
  • define routes - what goes where
  • filter some things in some cases

Camel gives you the above (and more) out of the box:

enter image description here

with a cool DSL language for you to define the what and how:

  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");
}

See also this and this and Camel in Action (as others have said, an excellent book!)


52



One of the things you need to understand, before you try to understand Apache Camel, are Enterprise Integration Patterns. Not everyone in the field is actually aware of them. While you can certainly read the Enterprise Integration Patterns book, a quicker way to get up to speed on them would be to read something like the Wikipedia article on Enterprise Application Integration.

One you have read and understood the subject area, you would be much more likely to understand the purpose of Apache Camel

HTH


45



BASED ON ANALOGY

Camel based routing can be understood much easily by putting yourself in the shoes of a Airline owner (eg.: American Airlines, Jet Airways) .

Purpose of 'your airline' is to 'carry' 'passengers' from one 'city' to another one in the world. You use aircrafts from different 'aircraft companies' like Boeing, Airbus, HAL for carrying passengers.

Your airline's boards passengers using 'airports' of the from city and deboards them using the airport of the to city. A passenger may 'travel' to multiple cities, but everywhere they have to go through the airport to travel between your airline's aircraft and the city.

Note that a passenger 'departing' from the city is essentially 'arriving' into your airlines' aircraft. And a passeger 'arriving' into the city, is essentially departing from the aircraft. Since we are in the shoes of airline owner, the term 'arrival passenger' and 'departing passenger' are reversed from our conventional notions which are based on cities perspective.

Same 'airport' infrastructure of each city is used by 'departing' passengers and 'arrival' passengers. An airport provides 'departing infrastructure' for departing passengers, which is different from the 'arrival infrastructure' provided for arriving passengers.

Passengers can continue doing their day to their activities due to various 'amenities' provided inside the aircraft by your airlines, while travelling.

On top of that, your airline also provides lounge facilities for special treatments like 'understanding local language' and or preparing you for the 'travel'.

Lets replace few words/phrases used above with following:

your airline: Apache Camel

aircraft companies: Transport mechanisms

your airline's aircraft: Apache Camel's underlying transport mechanism

carry: route

passengers: message;

city: system;

airport: Camel Component;

understanding local languages: Type Conversions;

departing: producing, produced

arriving: consuming, consumed

travel: routed

amenities: provided

After replacing the words, here is what you get:

Purpose of 'Apache Camel' is to route 'messages' from one 'system' to another one in the world. Apache camel uses different transport mechanisms for message routing.

Apache Camel picks up messages using 'Camel based Component' of the 'from' system and drops them using the 'Camel based Component' of the 'to' system. A message may route to multiple systems, but everywhere they have to go through 'Camel based Components' to travel between 'Apache Camel's underlying transport mechanism' and the system.

Note that a message 'produced' from the system is essentially 'consumed' into Apache Camel's underlying transport mechanism'. And a message consumed by a system, is essentially produced by the 'Apache Camel's underlying transport mechanism'.

Since we are attempting to understand Camel, we must think from Camel's perspective here onwards. The meaning of the terms 'consumer message' and 'producer message' are ,thus, reversed from our conventional notions which are based on a system's perspective.

Same 'Camel based Component's ' coding infrastructure is used by 'producer message' and 'consumer message'. A 'Camel based Component' provides a 'producer endpoint' for 'producer message' and a 'consumer endpoint' for 'consumer message'.

Messages can be processed by Camel when they are being routed.

On top of this routing, Camel provides special features like 'Type Conversion' and many more...


40