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

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

Что такое ESB?

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

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

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

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

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

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

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

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

Почему ESB?

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

  • 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, которую можно загрузить с их официального сайта.

Архитектура

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. Это позволяет устанавливать или удалять модули во время выполнения. Все артефакты в Fuse развернуты в Карафе.

Ткань

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

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

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

Установка Fuse - это четырехэтапный процесс:

Скачать

Загрузите Fuse 6.1.0 GA по следующей ссылке. http://www.jboss.org/

Разархивировать

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

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

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

Настроить

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

  • bin
  • etc
  • deploy
  • lib
  • licenses
  • extras
  • quickstarts

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

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

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

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

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

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

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

Окна

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

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

UNIX и клоны

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

$ vi ~/.bash_proflle

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

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

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

  • В user.properties

    • #admin=admin,admin

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

    • Например - FuseAdmin = FusePAss, admin

    • В System.properties

      • karafName = корень

        • Это указывает имя, которое вы хотите дать экземпляру 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: / репозиторий

      • Это свойство указывает путь к 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. 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

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

    Бежать

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

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

    • С помощью ./fuse

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

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

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

    • С помощью ./start

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

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

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

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

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

    HAWTIO

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

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

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

    Проблема JVM

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

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

    OSGi

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

    Преимущества OSGi

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

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

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

    Связки против функций

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

    Связки

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

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

    Особенности

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

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

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

    Karaf построен на Felix и Equinox, которые являются OSGi Framework.

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

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

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

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

    логирование

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

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

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

    Доступ по SSH

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

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

    Что такое Apache Camel?

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

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

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

    Базовый пример

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

    • Java
    • Maven
    • Предохранитель Redhat JBoss 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

    Установить Project в Fuse

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

    Это интерфейс командной строки для доступа к командам Karaf и Fuse.

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

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

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

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

    Input

    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>

    Output

    В 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>

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

    CamelContext

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

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

    Маршруты

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

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

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

    Составные части

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

    EIP

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

    Маршрутизатор на основе контента

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

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

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

    <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>

    Input

    D: /data/input/message1.xml

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

    D: /data/input/message2.xml

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

    Output

    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>

    Input

    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>

    Output

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

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

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

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

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

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

    Другие EIP

    Camel поддерживает почти все идентифицированные EIP. Некоторые из наиболее часто используемых EIP указаны ниже.

    • Log - Для регистрации всего сообщения или его части

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

    • Re-Sequencer - Чтобы получить все жетоны по порядку

    • Wiretap - Для проверки дорожных сообщений

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

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

    Using Error Handler - Это самый простой способ обработки исключений в camel.

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

    <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 block для обработки ошибок.

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

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

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

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

    Note- Mock - это тестируемый компонент и не рекомендуется для других целей. Это компонент в camel, используемый для тестирования так же, как компонент 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.bat/start.bat.

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

    Это интерфейс командной строки для доступа к командам Karaf и Fuse.

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

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

    Что такое Apache CXF?

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

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

    CXF против Axis2

    CXF Ось2
    Улучшения

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

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

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

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

    Требуется код

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

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

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

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

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

    Совместим с Spring

    да

    Нет

    Разделение интерфейсов

    Полное отделение интерфейса от кода JAX-WS

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

    МЫЛО

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

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

    • Code first - В этом подходе WSDL создается из кода.

    • Contract first - В контракте сначала код генерируется из 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

    Build Web Service Project.

    mvn clean install

    Install web-service into Fuse using the following command.

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

    Check if bundle has registered SOQP web-service

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

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

    Testing Web-Service

    mvn -Pclient

    INFO - Создание службы {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] ------------------------------------------------------------------------

    Начнем с того, что 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

    <pluginRepositories>
       <pluginRepository>
          <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>
       </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

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

    Что такое AMQ?

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

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

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

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

    Точка-точка

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

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

    Опубликовать / подписаться

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

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

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

    Войдите в FMC, используя localhost:8181 и выберите ActiveMQ таб.

    • Нажмите на + Создать
    • Введите имя очереди / темы
    • Выберите "Очередь / Тема" с переключателя.
    • Нажмите Create Queue / Create topic.

    Теперь вы должны увидеть TestQ создан в корне → Очередь →

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

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

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

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

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

    • Чтобы проверить содержимое этого сообщения, щелкните это конкретное сообщение.
    • Вы можете удалить конкретное сообщение, нажав кнопку «Удалить» в правом верхнем углу.

    В этой главе мы изучим основы работы 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.

    • password - указывает пароль для подключения к 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.

    Input

    D: /src/data/input.txt

    Test me

    Output

    Чтение из 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>

    Input

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

    Output

    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>

Input

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>

Output

D: / src /

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Профили

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

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

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

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

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

  • Войти в FMC localhost:8181

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

  • В левой части меню профиля нажмите на +

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

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

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

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

Нажмите Addчто приведет к всплывающему окну. Найдите нужный профиль и снова нажмитеAdd.

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

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

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

Runtime → Containers → root (выберите нужный контейнер) → First_profile (выберите профиль)

Щелкните вкладку Пакеты. Задайте путь к пакету в следующем формате и нажмите+.

mvn:group.id/artifact.id/version

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

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

Отмена развертывания пакета

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

Runtime → Containers → root (выберите нужный контейнер) → First_profile (выберите профиль)

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

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

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

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

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

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

Нажмите Create And Start Container

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

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

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

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

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

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

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

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

В этой главе мы обсудим несколько известных проблем, с которыми вы можете столкнуться при работе с 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)

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

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

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

Это может произойти по двум причинам:

  • Репозиторий Maven не указан
  • Пакет отсутствует в репозитории

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

Maven - это встроенный инструмент, используемый для создания артефактов Fuse. 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

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

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

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

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

mvn:com.tutorialpoint.app/camel-first-app/1.0-SNAPSHOT

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

Note - $ M2_REPO необходимо заменить фактическим путем к репозиторию Maven, для которого настроен Fuse.

Невозможно войти в FMC (графический интерфейс на основе браузера)

Users not Created - Если вы получаете следующий интерфейс, но не можете войти в систему с сообщением «Не удалось войти в систему, запрещено».

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

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

Username = Password,Role

Порт HAWTIO отличается

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

$FUSE_INSTALLATION_HOME/etc/org.ops4j.pax.web.cfg

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

org.osgi.service.http.port=8181

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

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

activemq.port = 61616