Учебники

JBoss Fuse — Краткое руководство

JBoss Fuse — Введение в ESB

В этой главе мы начнем с основ Enterprise Service Bus. Ниже приводится подробное объяснение ESB, а также его преимущества, недостатки и пара диаграмм для более легкого понимания.

Что такое ESB?

ESB расшифровывается как Enterprise Service Bus. ESB в своей простейшей форме является промежуточным программным обеспечением, которое действует как информационная магистраль, помогающая множеству приложений взаимодействовать.

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

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

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

Проблема интеграции

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

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

Такой подход является самым большим препятствием для интеграции, которая предполагает тесно связанную архитектуру. Это где ESB входит в картину. Каждое приложение не должно напрямую связываться с другим приложением; вместо этого все приложения взаимодействуют с ESB, а ESB управляет маршрутизацией информации и внутренним преобразованием формата данных.

Проблема интеграции

Почему ESB?

Ниже приведены несколько моментов, объясняющих, почему Enterprise Service Bus имеет важное значение.

  • ESB стремится упростить проблему интеграции с различными совместимыми приложениями.

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

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

  • ESB отвечает за перевод сообщений в / из общего формата и маршрутизацию их к месту назначения.

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

ESB стремится упростить проблему интеграции с различными совместимыми приложениями.

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

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

ESB отвечает за перевод сообщений в / из общего формата и маршрутизацию их к месту назначения.

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

ESB

SOA & ESB?

SOA и ESB обычно используются взаимозаменяемо, но они совершенно разные.

SOA — это шаблон проектирования, который позволяет приложению представлять свои функциональные возможности как сервис по сети через протоколы связи, тогда как ESB — это модель, которая облегчает обмен данными между разнородными системами, но ESB может использоваться в качестве основы при реализации SOA.

Что такое предохранитель?

JBoss Fuse — это решение с открытым исходным кодом ESB от Redhat. Это корпоративное решение, основанное на проекте сообщества Apache Servicemix.

Интеграция в Предохранитель

JBoss Fuse — это легкая и гибкая платформа интеграции, которая позволяет быстро интегрировать корпоративные приложения.

Изначально Fuse был разработан компанией Progressive software Inc., которая была приобретена Redhat в 2012 году. JBoss Fuse 6.1.0.redhat-379 GA — это стабильная версия Fuse, которую можно загрузить с их официального сайта.

Архитектура

Предохранитель объединяет различные технологии в единый продукт.

Архитектура

Компоненты

Apache CXF

Apache CXF — это среда разработки веб-сервисов с открытым исходным кодом, которая также поддерживает разработку веб-сервисов SOAP & Rest.

Apache Camel

Apache Camel — это интегрированная среда на основе EIP. Шаблоны EIP или Enterprise Integration — это идентифицированные решения для повторяющихся проблем в Enterprise Integration. Полное интеграционное решение может быть достигнуто метеорологически с комбинациями этих предопределенных готовых шаблонов.

Он позволяет писать логику маршрутизации на нескольких предметно-ориентированных языках, таких как Java, Spring DSL, Scala и т. Д.

Apache AMQ

Apache AMQ — это JMS, которая обеспечивает надежную систему обмена сообщениями в соответствии со стандартами JMS. Он не только поддерживает спецификацию JMS, но также предоставляет некоторые интересные и полезные функции, которые не включены в спецификации JMS.

Апаче Караф

Apache Karaf — это легкий OSGi-контейнер, который служит средой выполнения для артефактов. Apache Karaf более динамичен по сравнению с JVM. Это позволяет устанавливать или удалять модули во время выполнения. Все артефакты в Предохранителе развернуты в Карафе.

ткань

Fabric предоставляет простой способ управления развертыванием артефактов в большой и распределенной среде. Он обеспечивает централизованное управление всеми несколькими предохранителями.

Установка предохранителя

Установка Предохранителя довольно проста. Как и другие продукты JBoss, Fuse поставляется в виде zip-файла, который можно извлечь, и после некоторых незначительных изменений конфигурации он может быть запущен напрямую.

Установка Предохранителя состоит из четырех этапов —

Скачать

Скачать Fuse 6.1.0 GA можно по следующей ссылке. http://www.jboss.org/

расстегнуть молнию

Как и все другие продукты JBoss, Fuse также не зависит от платформы.

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

Примечание. Несмотря на то, что Fuse распаковывается и запускается, как и другие продукты JBoss, не рекомендуется перемещать установку Fuse из одного места в другое после ее завершения.

конфигурировать

После того, как вы распакуете Fuse, вы найдете следующие каталоги внутри извлеченного каталога:

  • бункер
  • так далее
  • развертывание
  • Lib
  • лицензии
  • дополнительные услуги
  • quickstarts

Из которых мы собираемся использовать только две директории bin & etc.

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

Установить переменные среды

  • Установите следующие переменные окруженияJAVA_HOME

  • Переменная должна указывать на каталог установки Java — M2_HOME

  • Переменная должна указывать на каталог установки Maven — PATH

  • Установите переменную пути, чтобы включить исполняемые файлы Java & Maven.

Установите следующие переменные окруженияJAVA_HOME

Переменная должна указывать на каталог установки Java — M2_HOME

Переменная должна указывать на каталог установки Maven — PATH

Установите переменную пути, чтобы включить исполняемые файлы Java & Maven.

Windows

В Windows настройки можно выполнить, следуя приведенным ниже инструкциям —

Пуск → Мой компьютер → Щелкните правой кнопкой мыши → Свойства → Дополнительные параметры системы → Переменные среды.

UNIX & Clones

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

$ vi ~ / .bash_proflle

Примечание. Любые изменения в этом файле являются постоянными. Настоятельно рекомендуется сделать резервную копию существующего файла перед изменением оригинала.

Базовая конфигурация

Мы обсудим базовую конфигурацию JBoss Fuse, и для этого нам нужно начать со следующей команды Edit $ FUSE_INSTALLATION_DIR / etc /

  • В user.properties

    • # Админ = администратор, администратор

    • Это должно быть изменено в соответствии с первым администратором с желаемым именем пользователя, вторым администратором с паролем, третьим может быть сохранен как есть, потому что он указывает на роль и не забудьте удалить #

    • Например — FuseAdmin = FusePAss, администратор

В user.properties

# Админ = администратор, администратор

Это должно быть изменено в соответствии с первым администратором с желаемым именем пользователя, вторым администратором с паролем, третьим может быть сохранен как есть, потому что он указывает на роль и не забудьте удалить #

Например — FuseAdmin = FusePAss, администратор

Базовая конфигурация

  • В System.properties

    • karafName = root

      • Это указывает на имя, которое вы хотите дать экземпляру Karaf.

      • Мы можем назвать его как угодно, как Cont1.

      • Убедитесь, что это имя является уникальным и не используется другим экземпляром Fuse.

  • В org.ops4j.pax.web.cfg

    • Org.osgi.service.http.port = 8181

    • Это свойство указывает порт, который должен использоваться для доступа к браузерному интерфейсу HAWTIO, предоставленному Fuse.

    • HAWTIO — это встроенный интерфейс браузера для Fuse, который доступен начиная с версии 6.0

  • В org.ops4j.pax.url.mvn.cfg

    • org.ops4j.pax.url.mvn.localRepository = D: / repository

    • Это свойство указывает путь к localRepository нашего Maven, откуда Fuse будет устанавливать его артефакты.

    • org.ops4j.pax.url.mvn.settings = D: /Maven/conf/settings.xml

    • Это свойство указывает settings.xml, который Fuse должен использовать для получения артефактов от Maven.

В System.properties

karafName = root

Это указывает на имя, которое вы хотите дать экземпляру Karaf.

Мы можем назвать его как угодно, как Cont1.

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

В org.ops4j.pax.web.cfg

Org.osgi.service.http.port = 8181

Это свойство указывает порт, который должен использоваться для доступа к браузерному интерфейсу HAWTIO, предоставленному Fuse.

HAWTIO — это встроенный интерфейс браузера для Fuse, который доступен начиная с версии 6.0

В org.ops4j.pax.url.mvn.cfg

org.ops4j.pax.url.mvn.localRepository = D: / repository

Это свойство указывает путь к localRepository нашего Maven, откуда Fuse будет устанавливать его артефакты.

org.ops4j.pax.url.mvn.settings = D: /Maven/conf/settings.xml

Это свойство указывает settings.xml, который Fuse должен использовать для получения артефактов от Maven.

Настройка Maven

Maven является обязательным условием для установки Fuse. Если вы не знаете, что такое Maven, пожалуйста, обратитесь к http://www.tutorialspoint.com/maven/

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

Отредактируйте $ FUSE_INSTALLATION_DIR / etc / org.ops4j.paxurl.mvn.cfg

Обновите следующие два свойства —

  • org.ops4j.pax.url.mvn.settings = $ M2_HOME / conf /settings.xml
  • org.ops4j.pax.url.mvn.localRepository = $ local_repo

Примечание. Пожалуйста, измените $ local_repo, указав фактический путь к локальному репозиторию, указанный в файле Mavens settings.xml.

Бежать

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

Есть два способа запустить Fuse —

  • Использование ./fuse

    • Это позволит вам увидеть весь прогресс и логи в том же окне, в котором вы запустили Fuse.

    • Это даст вам консоль Karaf в том же терминале, как показано ниже.

Использование ./fuse

Это позволит вам увидеть весь прогресс и логи в том же окне, в котором вы запустили Fuse.

Это даст вам консоль Karaf в том же терминале, как показано ниже.

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

  • Использование ./start

    • Это не будет отображать никаких журналов на экране, даже прогресс, но это запустит Fuse в фоновом режиме, и служба Fuse не будет остановлена, когда пользователь выйдет из сеанса или закроет терминал.

    • В реальных приложениях, этот тип поведения является желательным. Предохранитель должен работать в фоновом режиме, даже если мы закроем терминал.

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

    • Вы должны получить дисплей, как показано на следующем скриншоте.

    • Выход из клиентского скрипта не остановит службу Fuse. Это просто закроет консоль предохранителя.

Использование ./start

Это не будет отображать никаких журналов на экране, даже прогресс, но это запустит Fuse в фоновом режиме, и служба Fuse не будет остановлена, когда пользователь выйдет из сеанса или закроет терминал.

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

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

Вы должны получить дисплей, как показано на следующем скриншоте.

Выход из клиентского скрипта не остановит службу Fuse. Это просто закроет консоль предохранителя.

Настройка Maven

HAWTIO

Fuse также обеспечивает полный доступ к GUI через FMC (консоль управления Fuse). Вы можете найти GUI по нижеуказанному URL http: // localhost: 8181 .

HAWTIO

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

JBoss Fuse — Apache Karaf

В этой главе мы обсудим Apache Karaf и почему он называется облегченным OSGi-контейнером, а также его преимуществами и другими важными функциями.

Проблема с JVM

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

Чтобы решить эту проблему и разрешить модульность в Java-приложении, Fuse использует среду исполнения на основе OSGi, известную как Apache Karaf.

OSGi

Технология OSGi — это набор спецификаций, которые определяют систему динамических компонентов для Java. Эти спецификации позволяют разработать модель, в которой приложения (динамически) состоят из множества различных (повторно используемых) компонентов.

Преимущества ОСГи

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

  • Возможность повторного использования — многие компоненты могут использовать один и тот же компонент, развернутый в контейнере.

  • Развертывание — OSGi обеспечивает поддержку запуска, остановки и обновления компонентов на лету с помощью API-интерфейсов управления жизненным циклом без перезапуска контейнера.

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

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

Развертывание — OSGi обеспечивает поддержку запуска, остановки и обновления компонентов на лету с помощью API-интерфейсов управления жизненным циклом без перезапуска контейнера.

Пакеты Vs Особенности

Ниже приведено сравнение комплектов и функций.

Связки

Пакеты эквивалентны OSGi, что jars для JVM. Пакеты — это артефакты, которые можно развернуть в контейнере OSGi. Пакеты — это компоненты, которые работают вместе или независимо друг от друга, образуя приложение.

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

Характеристики

Функции — это способ развертывания нескольких пакетов вместе. Иногда имеет смысл размещать пакеты в группе. Функции позволяют нам развернуть группу пакетов с помощью только одной команды.

Почему еще один контейнер?

Apache Karaf — это среда исполнения на основе OSGi, где работают наши пакеты приложений. Fuse использует Apache Karaf в качестве среды выполнения, в которой пакеты работают и работают совместно для обеспечения бизнес-функциональности.

Караф построен на Феликсе и равноденствии, которые являются OSGi Frameworks.

Караф Архитектура

Караф Архитектура

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

Горячее развертывание

Караф поддерживает горячее развертывание. Он содержит каталог горячего развертывания. Все, что находится в этом каталоге, автоматически развертывается и устанавливается в Karaf в виде пакета.

логирование

Karaf обеспечивает централизованное ведение журналов, генерируя журналы для всех пакетов в $ Fuse_home / data / log . Мы можем отредактировать конфигурацию логгера в org.ops4j.pax.logging.cfg в каталоге $ Fuse_home / etc.

Консоль администратора

Karaf предоставляет изощренную и понятную консоль администратора для взаимодействия с запущенным экземпляром fuse. Он также предоставляет предварительно установленный набор команд, которые можно использовать для управления и мониторинга компонентов (Bundle) во время выполнения. Эта консоль является расширяемой, поэтому она позволяет добавлять новые команды в консоль, добавляя новые пакеты в консоль.

Консоль администратора

SSH доступ

Караф позволяет удаленный доступ к этой консоли администратора с помощью SSH. Любой человек с действительными учетными данными может подключиться к консоли администратора karaf через терминал SSH.

JBoss Fuse — Apache Camel

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

Что такое Apache Camel?

Apache Camel — это интегрированная среда с открытым исходным кодом, которая была запущена в начале 2007 года.

Это подход на основе EIP (Enterprise Integration Pattern), который предоставляет несколько готовых реализаций шаблонов, которые можно использовать для решения проблем интеграции предприятия. EIP — это не что иное, как проверенные решения хорошо документированных и повторяющихся проблем корпоративной интеграции.

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

Основной пример

Предварительные условия для использования Apache Camel:

  • Джава
  • специалист
  • Redhat JBoss Fuse 6.1-GA-379

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

mvn:archetype generate 
–DgroupId = com.tutorialpoint.app 
–DartifactId = camel-first-app 
–DarchetypeGroupId = org.apache.camel.archetypes
–DarchetypeArtifactId = camel-archetype-spring 
–DinteractiveMode = false -X

Это должно создать следующую структуру каталогов.

Структура каталогов

Это базовый каркас создаваемого приложения Camel.

Отредактируйте camel-context.xml

Отредактируйте приложение camel-first-app → src → main → resources → META-INF \ spring \ camel-context .xml, чтобы оно соответствовало приведенному ниже.

<?xml version = "1.0" encoding = "UTF-8"?>
<!-- Configures the Camel Context-->
<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://camel.apache.org/schema/spring
   http://camel.apache.org/schema/spring/camel-spring.xsd">

   <camelContext xmlns = "http://camel.apache.org/schema/spring">
      <!-- here is a sample which processes the input file
         (leaving them in place - see the 'noop' flag) 
         then performs content based routing on the message using XPath -->
			
      <route>
         <from uri = "file:///d:/src/data?noop=false"/>
         <choice>
            <when>
               <xpath>/person/city = 'London'</xpath>
               <log message = "UK message"/>
               <to uri = "file:///d:/target/messages/uk"/>
            </when>
				
            <otherwise>
               <log message = "Other message"/>
               <to uri = "file:///d:/target/messages/others"/>
            </otherwise>
				
         </choice>
			
      </route>
   </camelContext>
</beans>

Редактировать pom.xml

Добавьте следующий код внутри <plugins> </ plugins>

<plugin>
   <groupId>org.apache.felix</groupId>
   <artifactId>maven-bundle-plugin</artifactId>
   <version>2.3.4</version>
   <extensions>true</extensions>
	
   <configuration>
      <instructions>
         <Bundle-SymbolicName>
            ${project.artifactId}
         </Bundle-SymbolicName>
         <Import-Package>*</Import-Package>
      </instructions>
   </configuration>
	
</plugin>

Измените тип упаковки с jar → bundle .

<packaging>bundle</packaging>

Создайте проект с помощью следующей команды —

mvn clean install

Установить проект в предохранитель

Запустите Fuse с помощью Fuse.bat / start.bat . Если вы запускаете Fuse с помощью start.bat , используйте client.bat для подключения к Fuse. Вы должны получить пользовательский интерфейс, как показано на следующем скриншоте.

Установить проект в Fuse

Это CLI для доступа к командам Karaf и Fuse.

install –s mvn:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT

Проверьте, работает ли ваш проект

Теперь ваше приложение должно быть установлено в Fuse. Скопируйте каталог данных в camel-first-app и поместите его в D: / src /, и он должен скопировать сообщение с названием city = London в D: / target / merssages / uk .

Поместите входной файл в D: / src / data

вход

Message1.xml

<?xml version = "1.0" encoding = "UTF-8"?>
<person user = "james">
   <firstName>James</firstName>
   <lastName>Strachan</lastName>
   <city>London</city>
</person>

Message2.xml

<?xml version = "1.0" encoding = "UTF-8"?>
<person user = "hiram">
   <firstName>Hiram</firstName>
   <lastName>Chirino</lastName>
   <city>Tampa</city>
</person>

Выход

В D: / target / messages / uk

<?xml version = "1.0" encoding = "UTF-8"?>
<person user = "james">
   <firstName>James</firstName>
   <lastName>Strachan</lastName>
   <city>London</city>
</person>

В D: / target / messages / others

<?xml version = "1.0" encoding = "UTF-8"?>
<person user = "hiram">
   <firstName>Hiram</firstName>
   <lastName>Chirino</lastName>
   <city>Tampa</city>
</person>

Предохранитель JBoss — верблюжий концепт

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

CamelContext

Каждое приложение верблюда будет иметь по крайней мере один CamelContext. Это место, где мы добавляем верблюжьи маршруты. Это похоже на ApplicationContext из Spring.

Верблюжий контекст можно рассматривать как контейнер, который объединяет все вещи. В одном контексте верблюда может быть несколько маршрутов.

Маршруты

CamelContext может содержать один или несколько маршрутов. Маршруты — это логика интеграции, которая определяет, как данные будут передаваться в верблюжьем контексте от одной конечной точки к другой.

Конечная точка

Конечная точка — это конец канала, через который система может отправлять или получать сообщения. Это то, что мы называем местом назначения или источником на языке общения.

Компоненты

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

Компоненты

EIP

EIP расшифровывается как Enterprise Integration Pattern. Это идентифицированные и общеизвестные решения повторяющейся проблемы. Camel поддерживает большинство корпоративных шаблонов интеграции.

Контент-маршрутизатор

Шаблоны CBR позволяют нам направлять данные в соответствии с содержимым входного файла.

Контент-маршрутизатор

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

В следующем примере будут считаны данные из каталога D: / data / input . После прочтения он проверит тег значения внутри тега данных. Если тег значения содержит значение1 , он будет отправлен в D: / значение1. Если он содержит значение 2 , он будет отправлен в D: / значение2, и если ни один из них обоих, то он будет отправлен другим.

<CamelContext xmlns = "http://camel.apache.org/schema/spring">
   <route>
      <from uri = "file:///D:/data/input"/>
      <choice>
         <when>
            <xpath>/data/value = 'value1'</xpath>
            <to uri = "file:///D:/value1"/>
         </when> 
         <when>
            <xpath>/data/value = 'value2'</xpath>
            <to uri = "file:///D:/value2"/>
         </when>  
			
         <otherwise>
            <to uri = "file:///D:/others "/>
         </otherwise>
			
      </choice>
   </route>
</camelContext>

вход

D: /data/input/message1.xml

<data>
   <value>value1</value>
</data>

D: /data/input/message2.xml

<data>
   <value>value2</value>
</data>

Выход

D: / значение1 /

<data>
   <value>value1</value>
</data>

D: / значение2 /

<data>
   <value>value2</value>
</data>

Разветвитель

Шаблон разделения используется для разделения входных данных на более мелкие куски.

Разветвитель

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

<CamelContext xmlns = "http://camel.apache.org/schema/spring">
   <route>
      <from uri = "file:///D:/inbox"/>
      <split streaming = "true">
         <tokenize token = "order" xml = "true"/>
         <to uri = "activemq:queue:order"/>
      </split>
   </route>
</CamelContext>

вход

D: /inbox/message.xml

<order>
   <data>
      <value>value1</value>
   </data>
</order>

<order>
   <data>
      <value>value2</value>
   </data>
</order>

<order>
   <data>
      <value>value3</value>
   </data>
</order>

Выход

Если вы проверите AMQ, вы найдете 3 сообщения.

<order>
   <data>
      <value>value4</value>
   </data>
</order>

Список получателей

Шаблон списка получателей используется, когда необходимо получить список получателей из самого тела сообщения.

Список получателей

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

<CamelContext xmlns = "http://camel.apache.org/schema/spring">
   <route>
      <from uri = "jms:xmlOrders" />
      <recipientList>
         <xpath>/order/customer</xpath>
      </recipientList>
   </route>
</camelContext>

Другие EIP

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

  • Журнал — для регистрации полного сообщения или его части

  • Фильтр сообщений — фильтрация содержимого сообщений

  • Re-Sequencer — чтобы получить все токены в последовательности

  • Прослушка — для проверки путешествующих сообщений

Журнал — для регистрации полного сообщения или его части

Фильтр сообщений — фильтрация содержимого сообщений

Re-Sequencer — чтобы получить все токены в последовательности

Прослушка — для проверки путешествующих сообщений

Полный список EIP и их использование можно найти в официальной документации Camel http://camel.apache.org/eip.html.

Обработка исключений в Camel

Использование обработчика ошибок — это самый простой способ обработки исключений в Camel.

Чтобы использовать это, мы должны сконфигурировать bean-компонент класса обработчика ошибок и предоставить его в качестве ссылки на атрибут errorHandlerRef CamelContext .

<bean id = "loggingErrorHandler" class = "org.apache.camel.builder.LoggingErrorHandler">
   <property name = "logName" value = "mylogger.name"/>
   <property name = "level" value = "DEBUG"/>
</bean>

<camelContext errorHandlerRef = ” loggingErrorHandler” >
   …
</camelContext>

Использование Try Catch наконец

Camel также поддерживает стиль Java Try Catch finally для обработки ошибок.

Как и в Java, он имеет следующие три блока:

  • Блок doTry содержит код, который может генерировать исключение.

  • Блок doCatch содержит код, который необходимо выполнить в случае исключения.

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

Блок doTry содержит код, который может генерировать исключение.

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

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

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

<route>
   <from uri = "direct:start"/>
   <doTry>
      <process ref = "someProcesorThatmayFail"/>
      <to uri = "mock:result"/>
		
      <doCatch>
         <exception>java.io.IOException</exception>
         <exception>java.lang.IllegalStateException</exception>
         <to uri = "mock:catch"/>
      </doCatch>
		
      <doFinally>
         <to uri = "mock:finally"/>
      </doFinally>
		
   </doTry>
</route>

В приведенном выше примере мы можем дать список исключений, которые должны быть обработаны блоком catch.

Развертывание пакета в Fuse

Запустите Fuse с помощью Fuse.bat / start.bat .

Если вы запускаете Fuse с помощью start.bat, используйте client.bat для подключения к Fuse. Вы должны получить пользовательский интерфейс, как показано на следующем скриншоте.

Развертывание пакета в Fuse

Это CLI для доступа к командам Karaf и Fuse.

install –s mvn:group.id /artifact.id/version 
e.g. install –s mvn:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT

JBoss Fuse — Apache CXF

В этой главе давайте обсудим, что такое Apache CXF и как он может быть полезен при разработке SOAP и остальных веб-служб.

Что такое Apache CXF?

Apache CXF — это среда разработки веб-сервисов, которую можно использовать для разработки веб-сервисов SOAP и Rest. CXF полностью соответствует стандартам JAX-RS и JAX-Ws .

В настоящее время это наиболее широко используемая среда разработки веб-сервисов. CXF изучил и улучшил по сравнению с Axis2, который теперь постепенно заменяется CXF.

CXF против Axis2

CXF Axis2
улучшения

На данный момент CXF является наиболее используемой платформой.

Он имеет много улучшений по сравнению с Axis2

Axis2 постепенно заменяется CXf.

Требуется больше кода по сравнению с CXF

Код требуется

CXF требует меньше кода по сравнению с Axis2

Axis2 требует больше кода для сравнения

Стандартное соответствие

CSF полностью совместим с JAX-RS и JAX-WS

Axis2 не полностью совместим с JAX-RS и JAX-WS

Совместим с пружиной

да

нет

Разделение фронт-эндов

Чистое отделение внешнего интерфейса от кода JAX-WS

Чистое разделение не предусмотрено

На данный момент CXF является наиболее используемой платформой.

Он имеет много улучшений по сравнению с Axis2

Axis2 постепенно заменяется CXf.

Требуется больше кода по сравнению с CXF

CXF требует меньше кода по сравнению с Axis2

Axis2 требует больше кода для сравнения

CSF полностью совместим с JAX-RS и JAX-WS

Axis2 не полностью совместим с JAX-RS и JAX-WS

да

нет

Чистое отделение внешнего интерфейса от кода JAX-WS

Чистое разделение не предусмотрено

МЫЛО

SOAP означает простой протокол доступа к объектам. Это протокол для обмена структурированной информацией через веб-сервисы между двумя системами. Он в основном использует XML для структурирования данных и использует HTTP или SMTP для согласования и передачи сообщений.

Существует два подхода к разработке веб-сервисов SOAP:

  • Сначала код — в этом подходе WSDL генерируется из кода.

  • Сначала контракт — в контракте сначала код генерируется из WSDL.

Сначала код — в этом подходе WSDL генерируется из кода.

Сначала контракт — в контракте сначала код генерируется из WSDL.

Разработка SOAP с использованием CXF

Настроить Maven

Добавьте следующий профиль в файл settings.xml Maven.

<profiles>
   <profile>
      <id>Jboss-Fuse</id>
		
      <activation>
         <activeByDefault>true</activeByDefault>
      </activation>
		
      <repositories>
         <repository>
            <id>fusesource</id>
            <url>http://repo.fusesource.com/nexus/content/groups/public/</url>
            <snapshots>
               <enabled>false</enabled>
            </snapshots>
            <releases>
               <enabled>true</enabled>
            </releases>
         </repository>
      </repositories>
		
   </profile>
</profiles>

Создать скелет

mvn archetype:generate
-DarchetypeGroupId = org.apache.servicemix.tooling 
-DarchetypeArtifactId = servicemix-cxf-code-first-osgi-bundle 
-DarchetypeVersion=2012.01.0.redhat-60024 
-DgroupId = org.fusesource.example 
-DartifactId = cxf-basic 
-Dversion = 1.0-SNAPSHOT

Построить веб-сервис проекта .

mvn clean install

Установите веб-сервис в Fuse, используя следующую команду .

JBossFuse:karaf@root>install -s mvn:org.fusesource.example/cxf-basic/1.0-SNAPSH

Проверьте, есть ли в комплекте зарегистрированный веб-сервис SOQP

Открыть URL http: // localhost: 8181 / cxf

SOQP веб-сервис

Веб-сервис должен быть указан следующим образом.

Тестирование веб-сервиса

mvn -Pclient

ИНФОРМАЦИЯ — Создание службы { http://ws.totorials.com/ } PersonService из класса com.to

torials.ws.Person
Invoking getPerson...
getPerson._getPerson_personId = Guillaume
getPerson._getPerson_ssn = 000-000-0000
getPerson._getPerson_name = Guillaume
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 30.668 s
[INFO] Finished at: 2016-02-15T21:01:20+05:30
[INFO] Final Memory: 10M/37M
[INFO] ------------------------------------------------------------------------

JBoss Fuse — остальные веб-сервисы

Начнем с того, что REST расшифровывается как Передача представительского состояния. Это способ разработки веб-сервисов на основе кэшируемого протокола клиент-сервер без учета состояния, который в большинстве случаев является HTTP.

Веб-сервисы REST используют HTTP-запросы для публикации, получения, удаления данных из сети.

Разработка REST с использованием CXF

Создать простой проект быстрого запуска Maven

mvn archetype:generate 
-DgroupId = com.tuts.abhinav 
-DartifactId = rest-service
-DarchetypeArtifactId = maven-archetype-quickstart 
-DinteractiveMode = false

Добавить зависимости

<dependency>
   <groupId>org.apache.servicemix.specs</groupId>
   <artifactId>org.apache.servicemix.specs.jsr311-api-1.1.1</artifactId>
   <version>1.9.0</version>
   <scope>provided</scope>
</dependency>

<dependency>
   <groupId>org.apache.servicemix</groupId>
   <artifactId>servicemix-http</artifactId>
   <version>2013.01</version>
</dependency>

<dependency>
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.2.16</version>
</dependency>

Добавить инструкцию по сборке

<build>
   <defaultGoal>install</defaultGoal>
   <plugins>
      <plugin>
         <groupId>org.apache.felix</groupId>
         <artifalctId>maven-bundle-plugin</artifactId>
         <version>2.3.4</version>
         <extensions>true</extensions>
			
         <configuration>
            <instructions>
               <Bundle-SymbolicName>rest-example-database-post-method
                  </Bundle-SymbolicName>
               <Import-Package>* </Import-Package>
            </instructions>
         </configuration>
			
      </plugin>
   </plugins>
</build>

Добавить репозиторий Fuse Plugin

 <PluginRepositories>
    <PluginRepository>
       <Идентификатор> fusesource.m2 </ ID>
       <name> Репозиторий релизов сообщества FuseSource </ name>
       <Url> http://repo.fusesource.com/nexus/content/repositories/releases </ url>
       <Моментальные снимки>
          <Включена> False </ включен>
       </ Моментальные снимки>
		
       <релизы>
          <Включена> True </ включено>
       </ Релизы>
    </ PluginRepository>
 <PluginRepositories>

Добавить репозитории

<repositories>
   <repository>
      <id>fusesource.m2</id>
      <name>FuseSource Community Release Repository</name>
      <url>http://repo.fusesource.com/nexus/content/repositories/releases</url>
      <snapshots>
         <enabled>false</enabled>
      </snapshots>
		
      <releases>
         <enabled>true</enabled>
      </releases>
		
   </repository>
	
   <repository>
      <id>fusesource.ea</id>
      <name>FuseSource Community Early Access Release Repository</name>
      <url>http://repo.fusesource.com/nexus/content/groups/ea</url>
      <snapshots>
         <enabled>false</enabled>
      </snapshots>
      <releases>
         <enabled>true</enabled>
      </releases>
   </repository>
	
</repositories>

Создать класс обслуживания

Создайте класс UserService.java под com / tuts /

package com.tuts;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/UserService_1")
public class UserService {
   @GET
   @Path("/get_data")
   @Produces(MediaType.APPLICATION_JSON)
	
   public String getUser() {
      String reponse = "This is standard response from REST";
      return reponse;
   }
}

Создать Blueprint.xml

Создайте blueprint.xml в / src / main / resources / OSGI-INF / blueprint blueprint.xml

<?xml version = "1.0" encoding = "UTF-8"?>
<blueprint xmlns = "http://www.osgi.org/xmlns/blueprint/v1.0.0"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:jaxrs = "http://cxf.apache.org/blueprint/jaxrs"
   xsi:schemaLocation = "http://www.osgi.org/xmlns/blueprint/v1.0.0 
   http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
   http://cxf.apache.org/blueprint/jaxrs 
   http://cxf.apache.org/schemas/blueprint/jaxrs.xsd">
	
   <jaxrs:server id = "service" address = "/users">
      <jaxrs:serviceBeans>
         <ref component-id = "userService" />
      </jaxrs:serviceBeans>
   </jaxrs:server>
	
   <bean id = "userService" class = "com.tuts.UserService" />
</blueprint>

Установите сервис Rest в Fuse

install -s mvn:com.tuts.abhinav/rest-service/1.0-SNAPSHOT

Проверьте, есть ли в Bundle зарегистрированный веб-сервис

Открыть URL http: // localhost: 8181 / cxf

Зарегистрированный веб-сервис

Тестовый веб-сервис

Открыть URL-адрес http: // localhost: 8181 / cxf / users12 / UserService_1 / get_data

Localhost CXF

JBoss Fuse — Apache AMQ

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

Что такое AMQ?

ActiveMQ — это брокер сообщений с открытым исходным кодом, написанный на Java. Он полностью соответствует стандартам JMS 1.1.

JMS — это спецификация, которая позволяет разрабатывать систему, основанную на сообщениях. ActiveMQ действует как посредник сообщений, который находится между приложениями и позволяет им общаться асинхронно и надежно.

AMQ

Типы сообщений

Для лучшего понимания ниже приведены два типа сообщений.

Точка-точка

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

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

Точечный обмен сообщениями

Публикация / подписка

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

Публикация / подписка сообщений

Создание очереди и тем

Предохранитель поставляется в комплекте с ActiveMQ. Мы можем получить доступ к ActiveMQ с помощью консоли FMC (интерфейс на основе браузера для работы с AMQ).

Войдите в FMC с помощью localhost: 8181 и выберите вкладку ActiveMQ .

ActiveMQ

  • Нажмите на + Создать
  • Введите очередь / название темы
  • Выберите очередь / тему из переключателя
  • Нажмите на Создать очередь / Создать тему

Очередь / Создать тему

Теперь вы сможете увидеть TestQ, созданный под root → Queue →

TestQ

Чтобы проверить созданную тему, следуйте root → Topic.

Просмотр / удаление содержимого очереди

  • Войдите в FMC используя localhost: 8181

  • Выберите вкладку ActiveMQ

  • Root → Queue → TestQ <выберите очередь, которую вы хотите просмотреть> → Обзор

Войдите в FMC используя localhost: 8181

Выберите вкладку ActiveMQ

Root → Queue → TestQ <выберите очередь, которую вы хотите просмотреть> → Обзор

FMC

  • Чтобы проверить содержание этого сообщения, нажмите на это сообщение.

Сообщение

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

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

Предохранитель JBoss — AMQ с верблюдом

В этой главе мы изучим основы того, как ActiveMQ работает с Camel.

Настройка для компонента ActiveMQ

Прежде чем мы сможем использовать ActiveMQ-очередь или тему в нашем коде, мы должны настроить ActiveMQComponent. Минимальная конфигурация ActiveMQComponent может быть выполнена, как показано в следующей программе —

<bean id = "activemq" class = "org.apache.activemq.camel.component.ActiveMQComponent">
   <property name = "brokerURL" value = "tcp://localhost:61616"/>
   <property name = "userName" value = "admin"/>
   <property name = "password" value = "admin"/>
</bean>
  • brokerURL — указывает хост и порт для AMQ Broker.

  • username — указывает имя пользователя для подключения к AMQ Broker.

  • пароль — указывает пароль для подключения к AMQ Broker.

brokerURL — указывает хост и порт для AMQ Broker.

username — указывает имя пользователя для подключения к AMQ Broker.

пароль — указывает пароль для подключения к AMQ Broker.

Подключение к очереди

Теперь, когда мы настроили ActiveMQComponent, мы можем использовать его в нашем CamelContext в качестве конечной точки.

Мы будем использовать конечную точку AMQ в следующем формате —

Activemq:[queue|topic]:[queueName|topicName]

Написание сообщений в AMQ

<?xml version = "1.0" encoding="UTF-8"?>
<!-- Configures the Camel Context-->
<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://camel.apache.org/schema/spring
   http://camel.apache.org/schema/spring/camel-spring.xsd">

После развертывания этого пакета в контейнере Fuse вы сможете увидеть сообщения, опубликованные в AMQ, которые были размещены в виде файлов в D: / src / data .

вход

D: /src/data/input.txt

Test me

Выход

Написание сообщений в AMQ

Чтение из AMQ

<?xml version = "1.0" encoding = "UTF-8"?>
<!-- Configures the Camel Context-->

<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://camel.apache.org/schema/spring
   http://camel.apache.org/schema/spring/camel-spring.xsd">
	
   <camelContext xmlns = "http://camel.apache.org/schema/spring">
      <!-- here is a sample which processes the input files
         (leaving them in place - see the 'noop' flag)
          then performs content based routing on the message using XPath -->
			 
      <route>
         <from uri = "activemq:queue:TestQ"/>
         <to uri = "file:///d:/src"/>
      </route>
   </camelContext>
	
   <bean id = "activemq" class = "org.apache.activemq.camel.component.ActiveMQComponent">
      <property name = "brokerURL" value = "tcp://localhost:61616"/>
      <property name = "userName" value = "admin"/>
      <property name = "password" value = "admin"/>
   </bean>
	
</beans>

вход

После развертывания этого пакета вы должны увидеть файл, сгенерированный в D: / src, и сообщения будут использованы. Также Потребитель должен быть показан для этой очереди.

Чтение из AMQ

Выход

D: / SRC

Test me

Запись в тему

<?xml version = "1.0" encoding = "UTF-8"?>
<!-- Configures the Camel Context-->
<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans 
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://camel.apache.org/schema/spring 
   http://camel.apache.org/schema/spring/camel-spring.xsd">
	
   <camelContext xmlns = "http://camel.apache.org/schema/spring">
      <!-- here is a sample which processes the input files
         (leaving them in place - see the 'noop' flag)
          then performs content based routing on the message using XPath -->
			 
      <route>
         <from uri = "file:///d:/src"/>
         <to uri = "activemq:topic:TestTopic” />
      </route>
   </camelContext>
	
   <bean id = "activemq" class = "org.apache.activemq.camel.component.ActiveMQComponent">
      <property name = "brokerURL" value = "tcp://localhost:61616"/>
      <property name = "userName" value = "admin"/>
      <property name = "password" value = "admin"/>
   </bean>
	
</beans>

Чтение из темы

<?xml version = "1.0" encoding = "UTF-8"?>
<!-- Configures the Camel Context-->
<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "
   http://www.springframework.org/schema/beans 
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://camel.apache.org/schema/spring 
   http://camel.apache.org/schema/spring/camel-spring.xsd">
	
   <camelContext xmlns = "http://camel.apache.org/schema/spring">
      <!-- here is a sample which processes the input files
         (leaving them in place - see the 'noop' flag)
         then performs content based routing on the message using XPath -->
			
      <route>
         <from uri = "activemq:topic:TestTopic"/>
         <to uri = "file:///d:/src2"/>
      </route>
   </camelContext>
	
   <bean id = "activemq" class = "org.apache.activemq.camel.component.ActiveMQComponent">
      <property name = "brokerURL" value="tcp://localhost:61616"/>
      <property name = "userName" value = "admin"/>
      <property name = "password" value = "admin"/>
   </bean>
	
</beans>

вход

D: /src/file1.xml

<order>
   <data>
      <value>value1</value>
   </data>
</order>

<order>
   <data>
      <value>value2</value>
   </data>
</order>

<order>
   <data>
      <value>value3</value>
   </data>
</order>

Выход

D: / SRC /

<order>
   <data>
      <value>value1</value>
   </data>
</order>

<order>
   <data>
      <value>value2</value>
   </data>
</order>

<order>
   <data>
      <value>value3</value>
   </data>
</order>

JBoss Fuse — Ткань

Что такое ткань?

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

Почему ткань?

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

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

ткань

Настройка ткани

Создание Ткани

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

fabric: create --clean --zookeeper-password myZooPass

Подключение другого контейнера к Fabric —

fabric:join --zookeeper-password myZooPass <fabric_host>:2181 Cont1

Примечание. Пожалуйста, замените <fabric_host> фактическим именем хоста, на котором работает матрица.

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

Настройка ткани

профили

Профиль содержит следующую информацию —

  • Пакеты для установки
  • Возможности для установки
  • Конфигурации, которые будут применены

Профиль обеспечивает в матричной среде способ установки одинакового набора пакетов, функций и конфигурации на нескольких серверах.

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

Создание профилей

  • Войти в FMC localhost: 8181

  • Время выполнения → Управление

  • В левой части под меню «Профиль» нажмите +

Войти в FMC localhost: 8181

Время выполнения → Управление

В левой части под меню «Профиль» нажмите +

Создание профилей

Введите имя, которое вы хотите присвоить профилю, и нажмите «Создать».

Создание нового профиля

После этого профиль должен быть создан.

Применение профиля к контейнеру

Runtime → Containers → root (выберите нужный контейнер)

Применение профиля к контейнеру

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

Добавить профиль в контейнер

Профиль должен быть показан в списке, как показано на следующем снимке экрана.

Скриншот профиля

Развертывание пакета

Чтобы развернуть пакет, используйте следующий путь —

Время выполнения → Контейнеры → root (выберите нужный контейнер) → First_profile (выберите профиль)

Развертывание пакета

Перейдите на вкладку «Связки». Задайте путь к пакету в следующем формате и нажмите « .

МВН: group.id/artifact.id/version

Например: mvn: com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT

Добавлен комплект

Развернуто на контейнерах

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

Развертывание пакета

Чтобы отменить развертывание пакета, используйте следующий путь —

Время выполнения → Контейнеры → root (выберите нужный контейнер) → First_profile (выберите профиль)

Развертывание пакета

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

Вкладка Bundles

JBoss Fuse — Детский Контейнер

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

Создание дочернего контейнера

Войдите в FMC используя localhost: 8181

Теперь следуйте по пути: Runtime → container → + Create (кнопка справа)

Создание дочернего контейнера

Введите такие данные, как имя ребенка, родительский контейнер, число экземпляров и т. Д.

Создание нового контейнера

Нажмите Создать и запустить контейнер

Создать и запустить контейнер

Управление дочерним контейнером

Дочерний контейнер действует только как обычный контейнер.

Остановка детского контейнера

Чтобы остановить дочерний контейнер, следуйте по пути: Runtime → Container → Child1

Нажмите Стоп, чтобы остановить дочерний контейнер.

Остановка детского контейнера

Запуск дочернего контейнера

Чтобы запустить дочерний контейнер, следуйте по пути: Runtime → Container → Child1

Нажмите Пуск, чтобы запустить дочерний контейнер.

Запуск дочернего контейнера

JBoss Fuse — Проблемы и решения

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

Изменения кода не отражаются

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

JBossFuse:karaf@root > list|grep <Bundle Description>
For Example:
JBossFuse:karaf@root > list|grep Camel
[ 255] [Active ] [ ] [ ] [ 60] Fabric8 :: Camel Component (1.0.0.redhat-379)
[ 266] [Active ] [ ] [Started] [ 60] A Camel Spring Route (1.0.0.SNAPSHOT)

Примечание. Идентификатор пакета для пакета из выходных данных вышеуказанной команды и использование команды ниже.

JBossFuse:karaf@root > update <bundle id>
JBossFuse:karaf@root > update 266

Пакет не загружается

Это может произойти из-за следующих двух причин —

  • Хранилище Maven не указано
  • Пакет отсутствует в хранилище

Репозиторий Maven не указан

Maven — это встроенный инструмент, используемый для создания артефактов Предохранителя. Fuse сначала ищет в локальном репозитории Maven артефакты, когда мы запускаем команду для установки артефакта. Поэтому мы должны сообщить Fuse, где установлен Maven и путь к локальному хранилищу Mavens.

Отредактируйте $ FUSE_INSTALLATION_DIR / etc / org.ops4j.paxurl.mvn.cfg

Обновите следующие два свойства —

  • org.ops4j.pax.url.mvn.settings = $ M2_HOME / conf /settings.xml
  • org.ops4j.pax.url.mvn.localRepository = $ local_repo

Примечание. Пожалуйста, измените $ local_repo, указав фактический путь к локальному репозиторию, указанный в файле Mavens settings.xml.

Пакет не присутствует в репозитории

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

Например, если следующий пакет выдает ошибки при загрузке —

МВН: com.tutorialpoint.app/camel-first-app/1.0-SNAPSHOT

Мы должны проверить в $ M2_REPO / com / tutorialpoint / app / camel-first-app / 1.0-SNAPSHOT наличие фактического JAR.

Примечание. $ M2_REPO необходимо заменить реальным путем к репозиторию Maven, который мы настроили для использования Fuse.

Невозможно войти в FMC (GUI на основе браузера)

Пользователи не созданы — если вы получаете следующий пользовательский интерфейс, но не можете войти в систему с сообщением «Не удалось войти, запрещено».

Пользователи не созданы

Проверьте, добавили ли вы пользователей в $ FUSE_INSTALLATION_HOME / etc / users.properties

Правильный формат для добавления пользователей —

Username = Password,Role

Гавтио порт отличается

Если вы даже не можете получить пользовательский интерфейс по адресу localhost: 8181 в браузере, проверьте, правильно ли вы указали порт в URL.

$ FUSE_INSTALLATION_HOME / и т.д. / org.ops4j.pax.web.cfg

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

org.osgi.service.http.port=8181

AMQ Broker не работает

Убедитесь, что порт 61616 открыт и не используется в данный момент другим портом. Если вы хотите изменить порт 61616 по умолчанию на тот же, вы можете отредактировать его в $ FUSE_INSTALLATION_HOME / etc / System.properties