При настройке нескольких экземпляров посредников ActiveMQ в конфигурации «главный-подчиненный» может быть полезно настроить веб-консоль для каждого посредника в одном экземпляре Jetty. Это позволит вам использовать один URL для доступа к каждому из брокеров, просто изменив контекст URL.
Мы настроим посредников ActiveMQ, используя две основные пары подчиненных:
AMQ1M — AMQ1 Master
AMQ1S — AMQ1 Slave
Веб-консоль для обслуживания этих посредников будет настроена следующим образом:
http: // localhost: 8080 / amq1.
В случае сбоя AMQ1M этот URL-адрес затем переключится на AMQ1S.
AMQ2M — AMQ2 Master
AMQ2S — AMQ2 Slave
Веб-консоль для обслуживания этих брокеров будет настроена следующим образом:
http: // localhost: 8080 / amq2
В случае сбоя AMQ2M этот URL затем переключается на AMQ2S.
Эта конфигурация позволяет описательному URL-адресу идентифицировать посредников, которых он обслуживает, при минимальной конфигурации порта с помощью одного экземпляра Jetty.
Так что с концепцией вне пути давайте посмотрим на конфигурацию, которая сделает это возможным.
Примечание. В этом примере я буду использовать
дистрибутив
FuseSource ActiveMQ . Ниже приведен список двоичных файлов, используемых для настройки этого примера. Однако предоставленные инструкции должны работать как с дистрибутивами Apache, так и с FuseSource.
- апаша-ActiveMQ-5.5.1-предохранитель-01-13
- ActiveMQ-веб-консоли 5.5.1-предохранитель-01-13.war
- jetty-distribution-7.5.4.v20111024.zip
Шаг 1.
Загрузите дистрибутив
Jetty с сайта загрузки Eclipse Jetty . После загрузки распакуйте zip или tar.
Шаг 2.
Добавьте activemq-all-xxx-fuse-xx-xx.jar в каталог Jetty / lib.
Шаг 3.
Вниз войны ActiveMQ веб-консоли. Это можно получить через репозиторий FuseSource:
activemq-web-console . Откройте файл activemq-web-console-xxx-fuse-xx-xx.war в каталоге веб-приложений Jetty в веб-контексте с именем amq1. Повторите это и создайте веб-контекст amq2. После начала войны нам потребуется добавить некоторую конфигурацию JNDI в каждый веб-дескриптор веб-приложения (WEB-INF / web.xml). На этом этапе у вас должна быть структура каталогов,
похожая на следующую:
webapps
| _amq1
| _amq2
Шаг 5.
Для каждого из файлов веб-дескриптора веб-приложения (amq1 и amq2) (WEB-INF / web.xml) мы добавим следующую конфигурацию JNDI:
<!-- ========================================================== --> <!-- JNDI Config --> <!-- ========================================================== --> <resource-ref> <res-ref-name>jms/connectionFactory</res-ref-name> <res-type>javax.jms.ConnectionFactory</res-type> <res-auth>Container</res-auth> </resource-ref> <resource-ref> <res-ref-name>jmx/url</res-ref-name> <res-type>java.lang.String</res-type> <res-auth>Container</res-auth> </resource-ref>
Шаг 6.
Последний фрагмент конфигурации, который нам нужен, — это создание файлов jetty-env.xml для каждого из веб-приложений. Jetty-env.xml используется для настройки ресурсов JNDI, специфичных для приложения, и файл будет находиться в каталоге WEB-INF /. В каждом файле будут указаны URL-адрес ConnectionFactory и JMX.
Для amq1 файл jetty-env.xml будет настроен следующим образом:
<?xml version="1.0"?> <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"> <Configure id="amq1" class="org.eclipse.jetty.webapp.WebAppContext"> <New id="connectionFactory" class="org.eclipse.jetty.plus.jndi.Resource"> <Arg><Ref id="amq1"/></Arg> <Arg>jms/connectionFactory</Arg> <Arg> <New class="org.apache.activemq.ActiveMQConnectionFactory"> <Arg>failover:(tcp://localhost:61616,tcp://localhost:62616)</Arg> </New> </Arg> </New> <New id="url" class="org.eclipse.jetty.plus.jndi.Resource"> <Arg><Ref id="amq1"/></Arg> <Arg>jmx/url</Arg> <Arg> <New class="java.lang.String"> <Arg>service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi,service:jmx:rmi:///jndi/rmi://localhost:1299/jmxrmi</Arg> </New> </Arg> </New> </Configure>
Для amq2 файл jetty-env.xml будет настроен следующим образом:
<?xml version="1.0"?> <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"> <Configure id="amq2" class="org.eclipse.jetty.webapp.WebAppContext"> <New id="connectionFactory" class="org.eclipse.jetty.plus.jndi.Resource"> <Arg><Ref id="amq2"/></Arg> <Arg>jms/connectionFactory</Arg> <Arg> <New class="org.apache.activemq.ActiveMQConnectionFactory"> <Arg>failover:(tcp://localhost:63616,tcp://localhost:64616)</Arg> </New> </Arg> </New> <New id="url" class="org.eclipse.jetty.plus.jndi.Resource"> <Arg><Ref id="amq2"/></Arg> <Arg>jmx/url</Arg> <Arg> <New class="java.lang.String"> <Arg>service:jmx:rmi:///jndi/rmi://localhost:1399/jmxrmi,service:jmx:rmi:///jndi/rmi://localhost:1499/jmxrmi</Arg> </New> </Arg> </New> </Configure>
Шаг 7.
Теперь мы можем запустить причал, используя следующую команду:
java -Dwebconsole.type=jndi -jar start.jar
Эта команда информирует веб-консоли посредников об использовании свойств JNDI для предоставления ConnectionFactory и JMX-соединения.
Шаг 8.
В дополнение к конфигурации master / slave, необходимой для брокеров ActiveMQ, о которой я расскажу в моем следующем посте, нам также необходимо отключить конфигурацию Jetty. Файл конфигурации по умолчанию для ActiveMQ — это activemq.xml, расположенный в каталоге / conf посредника. Внизу этого файла вы найдете тег импорта, который используется для импорта ресурса: jetty.xml. Это должно быть закомментировано следующим образом:
<!--<import resource="jetty.xml"/>-->
Шаг 9.
Теперь мы готовы начать настройку брокеров «ведущий / ведомый». Для каждого брокера выполните следующую команду:
./bin/activemq console
Результат этой конфигурации
Теперь давайте посмотрим, как веб-консоль и Jetty ведут себя с этой конфигурацией. В вашем браузере перейдите по адресу http: // localhost: 8080 / amq1. Вы должны увидеть, что это соединяет вас с брокером amq1M, который является мастером в паре amq1.
ActiveMQ — amq1M (мастер) |
Теперь, если мы перейдем к терминалу, где был запущен брокер amq1M, и выполним команду ‘control c’, чтобы убить его, при обновлении браузера соединение переключится на брокер amq1S, который является ведомым в паре amq1.
ActiveMQ — amq1S (Slave) |
Чтобы проверить пары брокеров amq2, перейдите по адресу http: // localhost: 8080 / amq2. Вы должны увидеть, что это соединяет вас с amq2M, который является мастером в паре брокеров amq2.
ActiveMQ — amq2M (мастер) |
Опять же, если мы перейдем к терминалу, где был запущен брокер amq2M, и выполним команду ‘control c’, чтобы убить его, то при обновлении браузера соединение переключится на брокер amq2S, который является ведомым в паре amq2.
ActiveMQ — amq2S (Slave) |
Используя эту конфигурацию для настройки нескольких экземпляров пар брокеров ActiveMQ в одном экземпляре Jetty, вы можете увидеть, как можно упростить управление и доступ к веб-консолям для всех брокеров, поскольку среда масштабируется для поддержки многих экземпляров пар главный / подчиненный ActiveMQ. Это устраняет необходимость для каждого отдельного брокера иметь отдельные URL-адреса и порты для доступа к веб-консоли. В продолжение этого поста я покажу, как были настроены брокеры для поддержки конфигурации master / slave.