...
MQ (Message Queue)-сервер необходим для передачи сообщений между различными приложениями - компонентами системы. Он также важен для работы, как и сервер базы данных. В качестве MQ-сервера используется Apache ActiveMQ. Загрузите его
Оглавление |
---|
Быстрая установка
Примечание |
---|
|
Выполните с привилегиями sudo или root:
Блок кода | ||
---|---|---|
| ||
curl -fsSL $URL_BASE/activemq/5.15.5/activemq.sh activemq.sh
sh -eux activemq.sh |
Если системная переменная JAVA_HOME не прописана глобально или если вы хотите переопределить ее, то в укажите ее в файле bin/env.
Для системы с systemd вызовите (обратите внимание, что сервис будет запускаться от пользователя activemq):
Блок кода | ||
---|---|---|
| ||
systemctl enable activemq
systemctl start activemq |
Для системы с sysvinit отредактируйте файл bin/linux-x86-64/wrapper.conf, укажите правильный путь к бинарному файлу java в параметре wrapper.java.command. Создайте символическую ссылку:
Блок кода | ||
---|---|---|
| ||
ln -s /opt/activemq/current/bin/linux-x86-64/activemq /etc/init.d/activemq |
и вызовите:
Блок кода | ||
---|---|---|
| ||
service activemq start |
Подробная установка
Загрузите ActiveMQ с официального сайта (или установите из репозитария linuxLinux, однако в этом случае пути файлов могут отличаться от путей, указанных в данной главе). Рекомендуемая версия - 5.14.4 или или выше, т.к. в биллинге используются клиентские библиотеки 5.14.4.
Linux
Предупреждение |
---|
|
...
|
Распакуйте архив в каталог /opt/activemq, создайте символическую ссылку, например:
Блок кода | ||
---|---|---|
| ||
ln -s /opt/activemq/apache-activemq-5.15.5 /opt/activemq/current |
systemd
Для системы с systemd вызовите создайте файл activemq.service в каталоге /lib/systemd/system с содержимым:
Блок кода | ||
---|---|---|
| ||
[Unit]
Description=Apache ActiveMQ
After=network-online.target
[Service]
Type=forking
WorkingDirectory=/opt/activemq/current/bin
ExecStart=/opt/activemq/current/bin/activemq start
ExecStop=/opt/activemq/current/bin/activemq stop
Restart=on-abort
RestartSec=60
User=root
Group=root
[Install]
WantedBy=multi-user.target |
Затем выполните:
Блок кода | ||
---|---|---|
| ||
systemctl enable activemq
systemctl start activemq |
Логи выполнения хранятся в data/activemq.log и data/wrapper.log, по ним можно проследить безаварийный старт сервиса.
sysvinit
Укажите в скрипте запуска /opt/activemq/current/bin/linux/wrapper.conf переменную wrapper.java.command. Например:
Блок кода | ||||
---|---|---|---|---|
| ||||
# Java Application
wrapper.java.command=/opt/java/jdk/bin/java |
Создайте ссылку на службу (init.d).
Блок кода | ||||
---|---|---|---|---|
| ||||
ln -s /opt/activemq/current/bin/linux-x86-64/activemq /etc/init.d/activemq |
Настройте автоматический запуск службы и запустите её. При работе на одной машине с приложениями биллинга служба должна стартовать раньше всех приложений биллинга (регулируется префиксом ссылки).
Логи выполнения хранятся в data/activemq.log и data/wrapper.log, по ним можно проследить безаварийный старт сервиса.
Windows
Настройте системную переменную ACTIVEMQ_HOME, указывающую на каталог установки ActiveMQ.
Перейдите в директорию ACTIVEMQ_HOME/bin/win32. Выполните InstallService.bat. После выполнения в списке служб Windows должна появится служба ActiveMQ.
Логи выполнения хранятся в data/activemq.log и data/wrapper.log, по ним можно проследить безаварийный старт сервиса.
Настройка
Главный конфигурационный файл ActiveMQ, использующийся по умолчанию - conf/activemq.xml. Логин и пароль (те, что указываются в биллинге в mq.user и mq.pswd) расположены в файле conf/credentials.properties. Рекомендуемая конфигурация конфигурация activemq.xml:
Блок кода | ||
---|---|---|
| ||
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> <!-- Allows us to use system properties as variables in this configuration file --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <value>file:${activemq.conf}/credentials.properties</value> </property> </bean> <!-- Allows accessing the server log --> <bean id="logQuery" class="io.fabric8.insight.log.log4j.Log4jLogQuery" lazy-init="false" scope="singleton" init-method="start" destroy-method="stop"> </bean> <!-- The <broker> element is used to configure the ActiveMQ broker. --> <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}"> <destinationPolicy> <policyMap> <policyEntries> <policyEntry topic=">" optimizedDispatch="true"> <!-- The constantPendingMessageLimitStrategy is used to prevent slow topic consumers to block producers and affect other consumers by limiting the number of messages that are retained For more information, see: http://activemq.apache.org/slow-consumer-handling.html --> <pendingMessageLimitStrategy> <constantPendingMessageLimitStrategy limit="50000"/> </pendingMessageLimitStrategy> </policyEntry> </policyEntries> </policyMap> </destinationPolicy> <!-- The managementContext is used to configure how ActiveMQ is exposed in JMX. By default, ActiveMQ uses the MBean server that is started by the JVM. For more information, see: http://activemq.apache.org/jmx.html --> <managementContext> <managementContext createConnector="false"/> </managementContext> <!-- Configure message persistence for the broker. The default persistence mechanism is the KahaDB store (identified by the kahaDB tag). For more information, see: http://activemq.apache.org/persistence.html --> <persistenceAdapter> <kahaDB directory="${activemq.data}/kahadb"/> <!-- <kahaDB directory="${activemq.data}/kahadb" journalDiskSyncStrategy="periodic"/> --> </persistenceAdapter> <plugins> <!-- drop messages that have been sent to the DLQ --> <discardingDLQBrokerPlugin dropAll="true"/> <simpleAuthenticationPlugin> <users> <authenticationUser username="${activemq.username}" password="${activemq.password}" groups="user"/> <authenticationUser username="listener" password="listener" groups="anonymous"/> </users> </simpleAuthenticationPlugin> <!-- lets configure a destination based authorization mechanism --> <authorizationPlugin> <map> <authorizationMap> <authorizationEntries> <authorizationEntry queue="BG.Event.>" read="user" write="user" admin="user" /> <authorizationEntry topic="BG.Event.>" read="user, anonymous" write="user" admin="user" /> <authorizationEntry topic="ActiveMQ.Advisory.>" read="user, anonymous" write="user, anonymous" admin="user, anonymous"/> </authorizationEntries> <!-- let's assign roles to temporary destinations. comment this entry if we don't want any roles assigned to temp destinations --> <!-- <tempDestinationAuthorizationEntry> <tempDestinationAuthorizationEntry read="tempDestinationAdmins" write="tempDestinationAdmins" admin="tempDestinationAdmins"/> </tempDestinationAuthorizationEntry> --> </authorizationMap> </map> </authorizationPlugin> </plugins> <!-- The systemUsage controls the maximum amount of space the broker will use before disabling caching and/or slowing down producers. For more information, see: http://activemq.apache.org/producer-flow-control.html --> <systemUsage> <systemUsage> <memoryUsage> <memoryUsage limit="256 mb"/> <!--<memoryUsage percentOfJvmHeap="70" /> --> </memoryUsage> <storeUsage> <storeUsage limit="10 gb"/> </storeUsage> <tempUsage> <tempUsage limit="1 gb"/> </tempUsage> </systemUsage> </systemUsage> <!-- The transport connectors expose ActiveMQ over a given protocol to clients and other brokers. For more information, see: http://activemq.apache.org/configuring-transports.html --> <transportConnectors> <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB --> <transportConnector name="openwire" uri="tcp://127.0.0.1:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> </transportConnectors> <!-- destroy the spring context on shutdown to stop jetty --> <shutdownHooks> <bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" /> </shutdownHooks> </broker> <!-- Enable web consoles, REST and Ajax APIs and demos The web consoles requires by default login, you can disable this in the jetty.xml file Take a look at ${ACTIVEMQ_HOME}/conf/jetty.xml for more details --> <import resource="jetty.xml"/> </beans> |
...
К этому порту будут подключаться к серверу MQ приложения биллинговой системы. Если все компоненты биллинга установлены на одном сервере, то можно оставить значение значение uri=tcp://127.0.0.1:61616. Иначе нужно указать IP-адрес интерфейса, на который будут идти подключения или установить установить uri=tcp://0.0.0.0:61616, чтобы порт был открыт на всех интерфейсах.
Параметры подключения к серверу ActiveMQ указываются в каждом серверном приложении в .properties файле, например в в data/data.properties для для сервера биллинга.
Блок кода | ||||
---|---|---|---|---|
| ||||
mq.url=failover:(nio://127.0.0.1:61616) mq.user=bill mq.pswd=bgbilling |
Предупреждение |
---|
Значения mq.user и mq.pswd должны совпадать со значениями из conf/credentials.properties ActiveMQ. |
Для локальной машины машины mq.url=failover:(nio://127.0.0.1:61616), для нескольких серверов (должна быть настроена поддержка сети серверов в каждом из MQ-серверов):
...
Блок кода | ||||
---|---|---|---|---|
| ||||
mq.url=failover:(tcp://mq1.core.provider.org:61616,tcp://mq1.core.provider.org:61616)?randomize=false |
Linux
Предупреждение |
---|
Убедитесь, что имя сервера с ActiveMQ указано в файле /etc/hosts. Имя сервера можно получить командой uname -n. |
Пример установки ActiveMQ версии 5.14.4 в каталог /opt.
1) Перенесите каталог с ActiveMQ в /opt (/opt/apache-activemq-5.14.4);
2) Создайте символическую ссылку
Блок кода | ||||
---|---|---|---|---|
| ||||
ln -s /opt/apache-activemq-5.14.4 /opt/activemq |
3) Укажите в скрипте запуска /opt/apache-activemq-5.14.4/bin/linux/wrapper.conf переменную wrapper.java.command. Например:
Блок кода | ||||
---|---|---|---|---|
| ||||
# Java Application
wrapper.java.command=/opt/java/jdk/bin/java |
4) Создайте ссылку на службу (init.d).
Блок кода | ||||
---|---|---|---|---|
| ||||
ln -s /opt/activemq/bin/linux-x86-64/activemq /etc/init.d/activemq |
Настройте автоматический запуск службы и запустите её. При работе на одной машине с приложениями биллинга служба должна стартовать раньше всех приложений биллинга (регулируется префиксом ссылки).
Пример .service-файла systemd:
Блок кода | ||
---|---|---|
| ||
[Unit]
Description=Apache ActiveMQ
After=network.target
Requires=
[Service]
Type=forking
ExecStart=/opt/activemq/bin/linux-x86-64/activemq start
ExecStop=/opt/activemq/bin/linux-x86-64/activemq stop
[Install]
WantedBy=multi-user.target |
Логи выполнения хранятся в data/activemq.log и data/wrapper.log, по ним можно проследить безаварийный старт сервиса.
Windows
Настройте системную переменную ACTIVEMQ_HOME, указывающую на каталог установки ActiveMQ.
Перейдите в директорию ACTIVEMQ_HOME/bin/win32. Выполните InstallService.bat. После выполнения в списке служб Windows должна появится служба ActiveMQ.
Логи выполнения хранятся в data/activemq.log и data/wrapper.log, по ним можно проследить безаварийный старт сервиса.