Статьи

ActiveMQ: настройка нескольких экземпляров веб-консоли


При настройке нескольких экземпляров посредников 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.