Activemq запустить на windows

Обновлено: 03.07.2024

Установка и настройка ActiveMQ

Для начала качаем дистрибутив. Установка сводится к распаковке архива в какую-нибудь далекую папку. Для удобства работы установим его как службу Windows, для этого необходимо запустить скрипт ActiveMQ\bin\win32\InstallService.bat, наличие установленной JAVA машины предполагается само собой.
Проверить работоспособность можно через «Администрирование» -> «Службы», но только подождите секунд 10 после запуска и обновите список, на Win 2003 server у меня возникла проблема: служба вроде запускалась, но сразу же падала, долгое копание в логах и гуглах привело к простому решению – необходимо создать папку work в каталоге ActiveMQ\bin\win32.

Для настройки ActiveMQ необходимо открыть файл \conf\activemq.xml
Описываем наш брокер:

<broker xmlns = "activemq.apache.org/schema/core" brokerName = "localhost" dataDirectory = "$/data" destroyApplicationContextOnStop = "true" persistent = "true" useShutdownHook = "false" >

Блок должен располагаться за пределами тега . После перезапуска службы в БД должны будут создаться 3 таблицы, если так и произошло, значит все сделано правильно.

Идем дальше по конфигу, настроим возможные подключения:

<transportConnectors > <br/>
<transportConnector name = "openwire" uri = "tcp://0.0.0.0:61616" />
<br/>
<transportConnector name = "openwire2" uri = "stomp://0.0.0.0:61613" />
<br/>
</transportConnectors >

Здесь я задал 2 различных подключения по разным протоколам, это связано с тем, что на PHP для подключения я использую библиотеку STOMP, а под Delphi удалось найти компонент стабильно работающий по TCP.

Далее займемся авторизацией, в блок добавим следующий кусок:

<plugins > <br/>
<jaasAuthenticationPlugin configuration = "activemq-domain" />
<br/>
<authorizationPlugin > <br/>
<map > <br/>
<authorizationMap > <br/>
<authorizationEntries > <br/>
<authorizationEntry queue = ">" read = "admins" write = "admins" admin = "admins" />
<br/>
<authorizationEntry queue = "icq.>" read = "users" write = "users" admin = "admins" />
<br/>
<authorizationEntry topic = "ActiveMQ.Advisory.>" read = "guests,users" write = "guests,users" admin = "guests,users" />
<br/>
</authorizationEntries > <br/>
</authorizationMap > <br/>
</map > <br/>
</authorizationPlugin > <br/>
</plugins >

Теперь создаем файл groups.properties в папке /conf со следующим содержимым:
admins=system,sslclient,client,broker1,broker2
users=icq
guests=guest

Там же создадим файл users.properties и впишем в него:

Скрипт ICQ-бота

<?php <br/>
require_once 'Stomp.php' ; <br/>
$c = new StompConnection ( "localhost" ) ; <br/>
$result = $c -> connect ( "icq" , "bot" ) ; <br/>
<br/>
$mess = '<?xml version="1.0" encoding="windows-1251"?><br/>
<reference><br/>
<type>send</type><br/>
<to>111111111</to><br/>
<from>Test send:</from><br/>
<mes>Проверка русского message</mes><br/>
</reference>' ; <br/>
<br/>
$mess = iconv ( 'cp1251' , 'UTF-8' , $mess ) ; <br/>
$c -> send ( "/queue/icq" , $mess , array ( 'persistent' => 'true' ) ) ; <br/>
$c -> disconnect ( ) ; <br/>
?>

Запускаем бота как службу Windows

Для этого нам понадобится набор Windows NT Resource Kit, у кого нет качаем. Допустим все файлы бота у нас лежат в папке C:\icqbot. Открываем консоль и пишем
“C:\Program Files\Windows Resource Kits\Instsrv.exe” ICQBot “C:\Program Files\Windows Resource Kits\Srvany.exe”
Далее запускаем regedit и идем в раздел HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ICQBot внутри него создаем раздел Parameters и в нем параметр Application типа REG_SZ со значением «C:\Program Files\PHP\php.exe» C:\icqbot\icq.php
Далее идем в службы и запускаем оттуда нашего бота, теперь он полностью автономен.

Ловец ошибок для сайта


Наша конечная цель – отлавливать все ошибки, составлять подробный отчет и отправлять уведомление об этом на ICQ. Таким образом осталось описать только скрипт отлова этих ошибок, у меня он выглядит следующим образом и подключается во все скрипты где требуется контроль:
<?php <br/>
ini_set ( 'display_errors' , 0 ) ; <br/>
error_reporting ( 2 ) ; <br/>
<br/>
if ( $send_report ) < <br/>
include_once ( "Stomp.php" ) ; <br/>
<br/>
function send_report ( $message , $to = '1212312' , $from = 'SENDER' ) < <br/>
global $send_report , $stomp_server , $stomp_url , $stomp_user , $stomp_psw ; <br/>
if ( ! $send_report ) return false ; <br/>
$c = new StompConnection ( $stomp_server ) ; <br/>
$result = $c -> connect ( $stomp_user , $stomp_psw ) ; <br/>
if ( ! is_array ( $to ) ) $to = array ( $to ) ; <br/>
foreach ( $to as $i ) < <br/>
$mess = '<?xml version="1.0" encoding="windows-1251"?><br/>
<reference><br/>
<type>send</type><br/>
<to>' . $i . '</to><br/>
<from>' . $from . '</from><br/>
<mes>' . $message . '</mes><br/>
</reference>' ; <br/>
$c -> send ( $stomp_url , iconv ( 'cp1251' , 'UTF-8' , $mess ) , array ( 'persistent' => 'true' ) ) ; <br/>
> <br/>
$c -> disconnect ( ) ; <br/>
> <br/>
> <br/>
<br/>
function user_log ( $errno , $errmsg , $file , $line ) < <br/>
global $send_report ; <br/>
if ( $errno == 2 ) < <br/>
$filename = strftime ( '%d.%m.%Y %H-%M-%S_' ) . $_REQUEST [ 'PHPSESSID' ] . '.err' ; <br/>
$fl = fopen ( 'errors/' . $filename , 'w' ) ; <br/>
$_SESSION [ 'ERROR_TEXT' ] = 'WARNING: ' . $errmsg . ' in ' . $file . ' on line ' . $line ; <br/>
$_SESSION [ 'ERROR_TIME' ] = strftime ( '%d.%m.%Y %H-%M-%S' ) ; <br/>
$_SESSION [ 'ERROR_PHPSESSID' ] = $_REQUEST [ 'PHPSESSID' ] ; <br/>
$_SESSION [ 'ERROR_TYPE' ] = 'PHP SCRIPT ERROR' ; <br/>
fwrite ( $fl , serialize ( $_SESSION ) ) ; <br/>
fclose ( $fl ) ; <br/>
if ( $send_report ) send_report ( $_SESSION [ 'ERROR_TEXT' ] ) ; <br/>
> <br/>
> <br/>
<br/>
set_error_handler ( 'user_log' ) ; <br/>
?>

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

Главный конфигурационный файл ActiveMQ, использующийся по умолчанию, находится в conf/activemq.xml. Логины и пароли расположены в файле credentials.properties.

Обратите внимание на закомментированный фрагмент, в этом отрывке настраивается сеть серверов MQ - можно запустить несколько MQ-серверов, объединенных в одну сеть. При этом указывается имя сети (default).

В этом отрывке указывается тип коннектора для работы с сервером, интерфейс и порт:

К этому порту будут подключаться к серверу MQ приложения биллинговой системы. Если все компоненты биллинга установлены на одном сервере, то можно оставить значение uri=nio://127.0.0.1:61616. Иначе нужно указать ip интерфейса, на который будут идти подключения или установить uri=nio://0.0.0.0:61616, чтобы порт был открыт на всех интерфейсах.

Параметры подключения к серверу ActiveMQ указываются в каждом серверном приложении в .properties файле, например в data/data.properties для сервера биллинга.

Для локальной машины mq.url=failover:(nio://127.0.0.1:61616), для нескольких серверов (должна быть настроена поддержка сети серверов в каждом из MQ-серверов):

В последнем случае подключение будет к случайному из списка, если подключение невозможно - идет попытка подключения к следующему указанному серверу MQ, и так пока не установится подключение. Если второй сервер играет роль "запасного" - например, он установлен на слабой машине и должен принять работу только, если прервется работа первого сервера, то можно указать, чтобы подключение не устанавливалось к случайному, а попытки шли в указанном порядке:

Linux

Убедитесь, что имя сервера с ActiveMQ указано в файле /etc/hosts. Имя сервера можно получить командой uname -n.

Пример установки ActiveMQ версии 5.4.2 в каталог /opt.

1) Перенесите каталог с ActiveMQ в /opt (/opt/apache-activemq-5.4.2);

2) Создайте символическую ссылку

либо, если у вас 64х разрядная ОС

4) Создайте ссылку на службу.

Настройте автоматический запуск службы и запустите её. При работе на одной машине с приложениями биллинга служба должна стартовать раньше всех приложений биллинга (регулируется префиксом ссылки).

Логи выполнения хранятся в data/activemq.log и data/wrapper.log, по ним можно проследить безаварийный старт сервиса.

Windows

Настройте системную переменную ACTIVEMQ_HOME, указывающую на каталог установки ActiveMQ.

О разработчеке сайта


JMS: Введение в технологию и установка ActiveMQ сервера.

Принцип работы

При жестком связывании имеются две главные проблемы, которые и решает JMS:

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

Интерфейсы JMS

В версии JMS 1.0 были различные интерфейсы для каждого из домена. С выходом JMS 1.1 появился общий, унифицированный интерфейс для работы с одновременно двумя доменами. Рассмотрим главные интерфейсы:


Алгоритм создания программ, работающих с JMS

Весь алгоритм, при желании, можно просчитать по таблице интерфейсов:

Содержит информацию на подобии коллекций в виде ключ-значение (String, Object).

Транзакции в JMS

Возможна кроссдоменная транзакция с использованием JTA.

Пока с теорией закончим. Мы поняли, что это за зверь - JMS, его отличительные особенности и внутреннюю архитектуру.

Для аутентификации и авторизации клиентов, во всех MQ серверах возможно использование технологии JAAS. С ней можно познакомиться в одной из статей из серии JavaEE.

Выбор MQ сервера

В нашем случае мы будем использовать ActiveMQ сервер от Apache.

Установка ActiveMQ сервера

Для пользователей Windows все будет очень просто:

  1. Скачиваем архив сервера с сайта.
  2. Разархивируем архив и в папке bin запустим bat файл activemq.bat.

Для пользователей Linux задача чуть усложнится. Приведу пример установки на ОС Ubuntu:

Загрузка activeMQ

  1. Также скачиваем архив с сайта.
  2. Разархивируем его
  3. Перейдем в созданный каталог, там найдем папку bin и в ней выполним команду для создания файла настроек сервера:
  4. Если Вы последнее время сильно не грешили, то ActiveMQ должен запуститься командой:
    Я, по-видимому, был грешен с головы до пят, и потому были проблемы с запуском, но это частный случай конфликта настроек и у Вас он едва ли возможен.

Знакомство с сервером ActiveMQ

ActiveMQ веб-консоль


Поисследуйте возможности этой веб-консоли. Посмотрите примеры реализации некоторых способов связи с сервером.

Пытаемся подружить ActiveMQ и WildFly

Если сервер ActiveMQ у вас уже стоит, смело пропускайте эту часть. На момент выхода статьи, доступен ActiveMQ версии 5.

1) Скачаем сервер ActiveMQ с официального сайта и куда-нибудь распакуем.

2) Определим пользователей в файле conf/jetty-realm.properties, используя образец внутри.

Сервер ActiveMQ кроссплатформенное приложение и в папке bin находим версии для Windows и Linux.

3) Запустим скрипт с параметром start.

Админская панель ActiveMQ, сразу после устновки

Админская панель ActiveMQ, сразу после устновки

О WildFly

Все описанное далее выполнялось и проверялось на чистой копии WildFLy 11, запущенной в режиме standalone и взятой с официального сайта. Адаптер ActiveMQ требует профиля WildFly уровня не ниже full, поэтому необходимо запускать WildFly c параметром -c standalone-full.xml

Устанавливаем Resource Adapter

1) Получим с официального сайта файл activemq-rar-5.11.1.rar, для данного мануала нужна именно эта версия.

Не путать с архиватором Александра Рошала, в данном случае расширение rar указывает на специальный тип файла resource adapter, который традиционно упакован в zip. Да, да! Файл с расширением rar, является архивом zip.

2) Распакуем содержимое activemq-rar-5.11.1.rar в папку modules/org/apache/activemq/ra/main/, в эту же папку подкладываем файл module.xml

module.xml - файл, с прописанными зависимостями, устанавливаемого модуля в WildFly, приложенный подходит только для версии адаптера 5.11.1, для другой версии адаптера вы можете сделать его самостоятельно, по аналогии.

3) Задеплоим файл activemq-rar-5.11.1.rar на WildFly, подложив его в папку standalone/deployments.

Читайте также: