Здесь мы представляем полностью рабочий проект Apache Camel Blueprint. Он предоставляет пример кода для построения маршрутов, создания bean-компонентов и развертывания в ServiceMix с помощью Blueprint.
Чертеж
Короче говоря, Blueprint очень похож на Spring. На самом деле, это очень похоже на Spring, но с небольшими отличиями. Спецификация контейнера Blueprint была создана OSGi Alliance (с использованием Eclipse Gemini Blueprint в качестве эталонной реализации), чтобы предоставить приложениям лучшее разделение модулей, возможность динамического добавления, удаления и обновления модулей в работающей системе, возможность развертывания несколько версий модуля одновременно (с автоматическим подключением клиентов к соответствующей версии) и динамическая модель обслуживания. На Blueprint сильно влияет Spring, поэтому он реализует многие функции Spring, хотя больше ориентирован на приложения OSGi.
Файл Blueprint написан в XML и обычно содержится в
OSGI-INF/blueprint/
, который является его расположением по умолчанию.
Этот каталог будет упакован с результирующим файлом JAR, и контейнеры
OSGi, такие как ServiceMix, по умолчанию будут искать там один или
несколько файлов Blueprint. Кажется, это нигде не очень хорошо
документировано, но имейте в виду, что файлы Blueprint не обязательно
должны быть упакованы внутри файла JAR. Они могут быть автономными
файлами, которые загружаются в контейнер OSGi (т. deploy/
ServiceMix)
сами по себе. Это может быть очень удобно для изменения маршрута на
лету.
Код
Здесь мы покажем вам, как создать простой развертываемый маршрут Camel, используя сочетание Blueprint (для спецификации маршрута) и Java (для обработки сообщений). Каталог проекта имеет следующую структуру:
stackabuse-example-blueprint/
pom.xml
src/
main/
java/
com.stackabuse.example.WeatherProcessor.java
resources/
OSGI-INF/
blueprint/
blueprint-example.xml
test/
Использование
Maven для
пакетов OSGi очень удобно, в основном из-за предоставленного
maven-bundle-plugin, созданного проектом Apache Felix. Этот плагин,
учитывая некоторые конфигурации в pom.xml
, сгенерирует ваш файл
MANIFEST.MF для вас с помощью BND , что
избавит вас от многих головных болей.
blueprint-example.xml
содержит определения наших маршрутов Camel в
XML, который имеет тот же уровень детализации, что и язык, специфичный
для домена Java (DSL). Содержимое выглядит так:
<?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"
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/jaxws http://cxf.apache.org/schemas/blueprint/jaxws.xsd
http://cxf.apache.org/blueprint/core http://cxf.apache.org/schemas/blueprint/core.xsd
">
<bean id="weatherProcessor" class="com.stackabuse.example.WeatherProcessor" />
<camelContext xmlns="http://camel.apache.org/schema/blueprint">
<route>
<from uri="timer:fetch?period=3600s&delay=5s" />
<to uri="direct:trigger" />
</route>
<route>
<from uri="direct:trigger" />
<to uri="weather:foo?location=Omaha,United States&period=7 days&units=IMPERIAL" />
<process ref="weatherProcessor" />
<to uri="log:com.stackabuse.example?level=DEBUG" />
<to uri="file:/Users/scott/Desktop/weather?fileName=omaha.txt" />
</route>
</camelContext>
</blueprint>
Все файлы Blueprint начинаются с <blueprint>
тег и обычно содержат
<camelContext>
тег , чтобы указать Camel маршруты. В этом примере наш
маршрут запускается простым таймером каждый час (3600 секунд), в котором
он затем извлекает 7-дневный прогноз для Омахи, штат Северная Каролина,
США и сохраняет результат в файл на рабочем столе. Прежде чем данные
будут сохранены, они проходят через процессор, который определен как
Java bean, перед запуском тега <camelContext>
Этот bean-компонент,
показанный ниже, реализует org.apache.camel.Processor
и извлекает
только те данные, которые нам нужны, из возвращенных данных о погоде в
формате JSON. Он анализирует JSON и возвращает строку вида «[дата]:
[температура] Цельсия» для сохранения в файл.
На веб-сайте Apache Camel практически на каждой странице компонентов Camel представлены примеры как на Java, так и на Blueprint, что делает разработку маршрутов столь же простой, если не более простой, в Blueprint. Мне было трудно найти много примеров кода Blueprint, несмотря на его популярность, поэтому, если у вас когда-нибудь возникнут сомнения в возможностях Blueprint, просто предположите, что все, что работает в Spring, будет работать в Blueprint, плюс дополнительные функции / схемы, специфичные для Camel. .
Использование кода
Если вы хотите попробовать это сами, вы можете загрузить приведенный
ниже код. Для его запуска у вас должны быть установлены Apache Maven и
Apache ServiceMix. Создайте проект, stackabuse-example-blueprint
,
выполнив mvn package
и, наконец, поместив полученный файл JAR в
каталог deploy/
Поскольку полученный JAR-файл представляет собой пакет
OSGi, он не будет содержать зависимостей, как вы могли ожидать. Вам
также необходимо разместить следующие зависимости в папке deploy/
- org.apache.felix.eventadmin-1.3.2.jar
- верблюд-погода-2.12.3.jar
- верблюд-ядро-osgi-2.12.3.jar
- org.osgi.core-1.0.0.jar
- json-20140107.jar
Вы сможете найти все эти JAR-файлы в локальном репозитории Maven (
~/.m2/
) после сборки проекта с помощью Maven.
И , наконец, запустить пакет, начать ServiceMix либо исполняющий
servicemix
или start
с [ServiceMix Home Dir]/bin
. Через несколько
секунд weather/
содержащий файл с прогнозом погоды для Омахи на
следующий день.