В последнем сообщении в блоге я представил Fuse Fabric , обзор проблем, которые он призван решать, и компонентов, которые он использует для обеспечения безболезненного управления большими развертываниями контейнеров ActiveMQ и ServiceMix / ESB . В этом посте я бы хотел глубже погрузиться в урок и больше узнать о том, как его использовать. Этот пост может стать длинным, поэтому смело, если позволяет время. В противном случае предыдущего сообщения должно быть достаточно, чтобы получить представление о Fuse Fabric.
Давайте рассмотрим некоторые болевые точки развертывания крупных интеграционных решений на основе обмена сообщениями:
- Установка — установка приложений, маршрутов, сервисов, контейнеров
- Конфигурация — настройка приложений, сети брокеров, отработки отказа главного / подчиненного, конечных точек веб-службы
- Обновление — новые версии приложений, маршрутов, контейнеров
- Самоанализ — общие сведения об использовании компьютера, сведения о маршруте, статистика очереди / темы MQ и т. Д.
Представьте себе решение, в котором у вас есть более 10 брокеров, ESB-контейнеры или развертывания веб-сервисов (более 100), и вы можете увидеть, как каждая из этих болевых точек будет действительно болезненной.
Стартовая Ткань Предохранителя
Как я упоминал в предыдущем сообщении в блоге , рекомендация FuseSource состоит в том, чтобы использовать консоль управления Fuse, которая состоит из оболочки Fuse Fabric, а также изящное веб-приложение, которое использует Fabric для создания обложек для достижения целей управления и настройки конфигурации. Ткань через намного более сексуальный и интуитивно понятный интерфейс «укажи и нажми». Оболочка Fuse Fabric бесплатна, но для веб-приложения требуется подписка FuseSource (хотя вы можете запросить пробный ключ пробной версии , который я рекомендую). Если вы уже являетесь подписчиком, вы можете начать использовать его прямо сейчас.
После того, как вы загрузили консоль управления предохранителями (далее именуемую FMC), распакуйте ее и перейдите в ее корневой каталог. Список каталога показывает следующее содержимое:
Бен папка содержит все скрипты , необходимые для запуска FMC.
- fmc — запускает локальную оболочку, позволяющую создать ткань или присоединиться к существующей
- fmc-admin — выполняет основные функции администратора (остановка, запуск, создание, уничтожение, изменение портов) на экземпляре
- fmc-client — прикрепить оболочку к работающему контейнеру FMC
- fmc-shell — запустить простую оболочку Karaf (без Fabric)
- fmc-start — запустить корневой FMC как сервис (без интерактивной оболочки)
- fmc-stop — остановить корневой контейнер FMC
- karaf — основной скрипт для запуска базовой оболочки karaf
Другие папки, представляющие интерес:
- etc / — все файлы конфигурации для корневого контейнера
- data / — журналы, кеш пакетов, файлы zookeeper (после запуска реестра)
- instances / — (после запуска контейнера) дочерние контейнеры
- fabric / — профили и другие связанные с тканями файлы
- system / — действует как локальный репозиторий Maven, где сначала будут извлекаться пакеты
Для этого урока мы будем использовать скрипт bin по умолчанию для запуска контейнера и оболочки:
./bin/fmc
Когда вы запустите эту команду, FMC загрузит все пакеты, функции и конфигурацию, необходимые для начальной загрузки корневого контейнера. В зависимости от вашей машины загрузка может занять некоторое время. Когда все будет готово, вы должны увидеть экран приветствия. Обратите внимание на отображаемый URL-адрес: http: // localhost: 8107 / Это URL-адрес, используемый для подключения к веб-приложению FMC.
Команды Fabric
Мы не будем вдаваться в подробности всех доступных команд, но это контейнер Karaf, поэтому большинство команд, доступных для Karaf, должны работать. Обратите внимание, что есть завершение Tab (начните вводить несколько символов и нажмите Tab, чтобы увидеть, какие команды доступны), что очень полезно. Мы будем использовать вспомогательную оболочку Fabric, чтобы выполнить множество шагов в этом руководстве, поэтому давайте посмотрим, какие команды доступны:
FMC: karaf @ FuseManagementConsole> фабрика: <нажмите вкладку здесь>
Обратите внимание на некоторые команды, представляющие интерес:
- Ткань: создать
- Ткань: контейнер создать-SSH
- Ткань: профиль-лист
- Ткань: MQ создать
Так же, как полезный указатель, оболочка позволяет вам просматривать документацию для каждой из команд, набрав –help после команды:
FMC: karaf @ FuseManagementConsole> ткань: создать —help
Также есть онлайн-документация для каждой из команд.
Поскольку у нас нет реестра фабрики (мы его не создали и не присоединились), ни одна из команд фабрики для создания контейнера или вывода профиля не будет доступна. Таким образом, мы должны создать реестр ткани. Сделайте это со следующим:
FMC: karaf @ FuseManagementConsole> ткань: создать
Вы не увидите вывод после выполнения этой команды. Он должен вернуться к приглашению, если выполнено успешно. Чтобы увидеть некоторые подробности о том, что произошло, вы можете просмотреть журнал, и вы заметите, что некоторые потоки Zookeeper были созданы, среди прочего. Вы не должны видеть никаких следов стека.
FMC: karaf @ FuseManagementConsole> журнал: отображение
Теперь мы должны увидеть список профилей или список контейнеров:
FMC: karaf @ FuseManagementConsole> ткань: список профилей
FMC: karaf @ FuseManagementConsole> фабрика: список контейнеров
FMC: karaf @ FuseManagementConsole> фабрика: список ансамблей
Найдите минутку, чтобы увидеть список профилей, контейнеров и контейнеров в ансамбле. Список профилей покажет все профили, которые поставляются по умолчанию с FMC. Единственными контейнерами в списке контейнеров и ансамбле должен быть контейнер FuseManagementConsole.
Уделите немного времени изучению некоторых других команд Fabric и ознакомьтесь с их действиями с помощью параметра -help.
Возможно, вам будет интересно узнать, что некоторые из команд, которые начинаются с fabric: имеют ярлыки, позволяющие исключить префикс fabric: subshell, то есть вы можете написать контейнер-список вместо fabric: container-list . Вы заметите это для многих команд фабрики, и я укажу их, когда это уместно.
Создание контейнеров
Для этого урока мы создадим контейнеры как локально, так и удаленно по SSH. Если я сделаю часть III этой серии, я покажу создание контейнеров в облаке (Amazon EC2 с проектом jclouds).
Итак, начнем.
Команда fabric: container-create — это общая версия команды для создания контейнеров локально, удаленно через SSH или удаленно в облаке. Его можно сократить, опуская идентификатор fabric: subshell: create-container . Я рекомендую использовать более конкретные удобные команды для создания локальных, ssh или облачных развертываний: container-create-child , container-create-ssh , container-create-cloud для создания соответствующих контейнеров. Начнем с локальных контейнеров:
FMC: karaf @ FuseManagementConsole> контейнер-создание-дочерний FuseManagementConsole TestContainer
Вы можете вызвать –help для любой интересующей вас команды. В этом случае мы создали новый локальный контейнер с именем TestContainer, который является дочерним по отношению к родительскому FuseManagementConsole. Дочерний контейнер — это локальный контейнер, который является отдельной JVM на том же хосте, что и корневой контейнер. Локальные контейнеры вы найдете в папке $ FMC_HOME / instances.
Теперь, когда вы создаете контейнер-список, вы должны увидеть наш TestContainer:
FMC: karaf @ FuseManagementConsole> список контейнеров
Вы увидите новый контейнер в списке, но у него нет профилей! По умолчанию, если вы не укажете ни одного профиля, будет применен профиль по умолчанию . Мы могли бы применить профиль, когда создали контейнер с помощью этой команды:
FMC: karaf @ FuseManagementConsole> container-create-child —profile camel FuseManagementConsole TestContainer
Это применило бы профиль верблюда . Чтобы применить несколько профилей, укажите параметр –profile несколько раз.
Но поскольку мы изначально этого не делали, мы можем применить профиль с помощью этой команды:
FMC: karaf @ FuseManagementConsole> профиль изменения контейнера TestContainer верблюд
Эта команда заменяет все профили в указанном контейнере (TestContainer) указанным профилем (верблюд). Вы можете указать несколько профилей, разделив их пробелом:
FMC: karaf @ FuseManagementConsole> профиль изменения контейнера TestContainer camel mq
Вы можете сделать то же самое для удаленных контейнеров. Для удаленных контейнеров (ssh) вам необходимо иметь имя пользователя / пароль или открытый / закрытый ключи, настроенные для аутентификации. В нашем примере мы будем использовать аутентификацию с открытым ключом.
FMC: karaf @ FuseManagementConsole> container-create-ssh —host ec2-174-129-120-160.compute-1.amazonaws.com — профиль верблюда — пользователь ec2-пользователь —private-key / home / ec2 -user / .ssh / postakey.pem TestRemoteContainer
Изучение профилей
Мы увидели, как создавать дочерние и удаленные контейнеры (сохранят облачные контейнеры для следующей записи в блоге), но как насчет профилей? Давайте немного рассмотрим профили.
FMC: karaf @ FuseManagementConsole> список профилей
Мы использовали удобную команду profile-list вместо полноценной команды fabric: profile-list , и перечисленные профили являются теми, которые поставляются с FMC по умолчанию. Давайте внимательнее посмотрим на пример верблюжьего профиля:
FMC: karaf @ FuseManagementConsole> пример профиля верблюд
Мы можем видеть три основные вещи из отображения профиля:
- родительский профиль для примера-верблюд — это профиль karaf
- конкретный репо для функций Караф указан
- определенная функция установлена
Если вы вспомните предыдущий пост , профили применяют функциональность или конфигурацию к контейнеру. В этом случае применяемая функциональность представляет собой верблюжий маршрут, определенный в функции fabric-camel-demo .
Так получилось, что мы можем взглянуть на эту демонстрацию здесь, на GitHub
Путь верблюда для примера здесь :
<!-- Copyright (C) FuseSource, Inc. http://fusesource.com Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <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"> <camelContext id="fabric-camel-demo" xmlns="http://camel.apache.org/schema/blueprint"> <route id="route1"> <from uri="timer://foo?period=5s"/> <setBody> <simple>Fabric Camel Example: ${date:now:hh:MM:ss.SSS})</simple> </setBody> <to uri="activemq:queue:camel-test"/> </route> <route id="route2"> <from uri="activemq:queue:camel-test"/> <to uri="log:org.fusesource.fabric?level=INFO&showExchangePattern=false&showBodyType=false"/> </route> </camelContext> <!-- use the fabric protocol in the brokerURL to connect to the ActiveMQ broker registered as default name --> <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="discovery:(fabric:default)" /> </bean> <bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"> <property name="maxConnections" value="1" /> <property name="maximumActive" value="500" /> <property name="connectionFactory" ref="jmsConnectionFactory" /> </bean> <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent" > <property name="connectionFactory" ref="pooledConnectionFactory"/> </bean> </blueprint>
Этот простой верблюжий маршрут отправляет сообщение с текущей отметкой времени в очередь с именем camel-test . Возможно, вы захотите узнать, какому брокеру отправляется это сообщение? Если вы посмотрите на фабрику соединений, то используется URL-адрес брокера discovery: (fabric: default) . Вы видели это раньше?
Клиенты могут подключаться к брокерам ActiveMQ в Fabric с использованием нового протокола обнаружения . В частности, приведенный выше URL-адрес брокера гласит: «подключите меня к брокеру из группы по умолчанию в Fabric». У Марка Брукса есть замечательный учебник по подключению клиентов к брокерам в Fabric в блоге Fuse By Example .
Вернемся к примеру с верблюжьим профилем. Мы видели, что у него есть репозиторий и определенная особенность. Мы также видели, что у него есть родительский профиль ( профиль karaf ). Вот команда для наложения деталей родительского профиля с текущим профилем:
FMC: karaf @ FuseManagementConsole> отображение профиля — наложение примера верблюда
Здесь показаны все функции и репозитории объектов, связанные с профилем, включая унаследованные. Давайте продолжим и применим профиль к локальному контейнеру, который мы создали ранее:
FMC: karaf @ FuseManagementConsole> контейнер-профиль изменения TestContainer верблюд пример-верблюд
Это удалит все профили, уже связанные с контейнером TestContainer, и применит профили camel и example-camel. Как только новый профиль будет применен, Fabric Agent на TestContainer попытается предоставить все необходимые конфигурации, функции и комплекты.
Теперь возникает вопрос … работает ли этот верблюжий маршрут? Прямой ответ — да, это так. Но … у нас нет настроенных брокеров, так на что это отправляет сообщения?
Давайте настроим брокера.
Настройте брокер сообщений
Мы можем создать брокера, применив профиль mq к контейнеру, например:
FMC: karaf @ FuseManagementConsole> профиль изменения контейнера TestRemoteContainer mq
Однако мы собираемся использовать команду mq-create fabric для настройки посредника.
FMC: karaf @ FuseManagementConsole> mq-create —assign-container TestRemoteContainer mq-test
Команда mq-create предназначена для настройки посредников. Вы можете назначить группы посредников для установок главного / подчиненного HA, сетей посредников и указать, какие файлы конфигурации хранилища или посредника следует использовать. Это удобная команда для администрирования брокеров сообщений. Приведенная выше команда присвоила профилю mq-test, который является новым профилем, который является дочерним по отношению к профилю mq-base, к TestRemoteContainer. Используйте команду mq-create для создания профилей mq. По умолчанию брокер будет назначен в группу «по умолчанию». Это позволит верблюжьему маршруту из примера верблюжьего профиля подключаться к посреднику через URL-адрес обнаружения: (fabric: default) .
Чтобы увидеть пример настройки сетей брокеров, см. Сообщение Марка Брукса в блоге на FuseByExample.
Обновление до новой версии
Обновление профиля до новой версии так же просто, как и применение любой версии. Вариант использования для обновления профилей может выглядеть следующим образом:
У вас есть верблюжий маршрут, развернутый в производстве, но вы внесли некоторые изменения, добавили некоторые новые функции. Допустим, профиль example-camel из более ранней версии (1.0) имеет некоторые изменения и теперь требует компонента camel-scala.
Сначала мы хотим сделать новую копию профилей и увеличить версию:
FMC: karaf @ FuseManagementConsole> фабрика: версия-создание 1.1
Это создает копию профилей 1.0, которые готовы использовать для 1.1.
FMC: karaf @ FuseManagementConsole> фабрика: редактирование профиля — функции верблюд-скала пример-верблюд 1.1
С помощью этой команды мы редактируем профиль, чтобы включить функцию camel-scala. Теперь давайте обновим TestContainer:
FMC: karaf @ FuseManagementConsole> фабрика: обновление контейнера 1.1 TestContainer
резюмировать
Большая часть этого поста познакомила вас с FMC, Fabric и некоторыми его возможностями. Мы также увидели, как установить верблюжий маршрут, как подготовить контейнер MQ и как обновить профиль. Fuse FMC и Fuse Fabric являются очень мощными инструментами, помогающими управлять корпоративными развертываниями интеграционной инфраструктуры. Управление большими развертываниями ActiveMQ или ServiceMix может быть очень подвержено ошибкам и затруднено даже для тех, кто хорошо снабжен пользовательскими сценариями и шаблонами. Посмотрите на Fuse Fabric / FMC и дайте мне знать, если у вас есть какие-либо вопросы! Я попытаюсь выполнить часть III этого поста, чтобы показать облачные развертывания и показать еще несколько демонстраций. Дайте мне знать, если есть интерес к этому.