1. Установка Artemis MQ:
1.1. Установка базовых пакетов
Блок кода | ||
---|---|---|
| ||
yum -y install java-1.8.0-openjdk-headless yum -y install libaio |
1.2. Скачать дистрибутив с сайта https://activemq.apache.org/artemis/past-releases.html. Версию дистрибутива можно брать последнюю.
1.3. Расположить дистрибутив в каталоге /opt/
1.4. Выполнить переход в каталог расположения дистрибутива и разархивировать его:
Блок кода |
---|
cd /opt/ tar -xzf apache-artemis-2.6.2-bin.tar.gz mv apache-artemis-2.6.2 artemis |
1.5. Выполнить установку:
где, 127.0.0.1 заменить на ip сервера, на котором выполняется установка Artemis MQ
Блок кода |
---|
/opt/artemis/bin/artemis create addresses 127.0.0.1 --allow-anonymous --user admin --password admin --host 127.0.0.1 /opt/broker |
1.6. Указать в файле bootstrap.xml, пример расположения /opt/broker/etc/, ip и port, на которых будет доступен административный интерфейс:
host - сервер, на котором выполняется установка Artemis MQ
port - используется в url в браузере для доступа к интерфейсу брокера
Пример: http://host:port/console/login
Блок кода | ||
---|---|---|
| ||
<web bind="http://host:port" path="web"> |
Указать в файле jolokia-access.xml, пример расположения /opt/broker/etc/, набор подсетей для доступа к веб-интерфейсу:
К примеру, если доступ нужен только из сети интертраст:
Блок кода | ||
---|---|---|
| ||
<allow-origin>*://169.254.*</allow-origin> |
1.7. Отредактировать в broker.xml, пример расположения /opt/broker/etc/, блок <address-settings>..</address-settings> до вида:
(можно полностью заменить блок куском ниже)
Блок кода | ||||
---|---|---|---|---|
| ||||
<address-settings>
<!-- if you define auto-create on certain queues, management has to be auto-create -->
<address-setting match="activemq.management#">
<dead-letter-address>DLQ</dead-letter-address>
<expiry-address>ExpiryQueue</expiry-address>
<redelivery-delay>0</redelivery-delay>
<!-- with -1 only the global-max-size is in use for limiting -->
<max-size-bytes>-1</max-size-bytes>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
<address-full-policy>PAGE</address-full-policy>
<auto-create-queues>true</auto-create-queues>
<auto-create-addresses>true</auto-create-addresses>
<auto-create-jms-queues>true</auto-create-jms-queues>
<auto-create-jms-topics>true</auto-create-jms-topics>
</address-setting>
<!--default for catch all-->
<address-setting match="#">
<dead-letter-address>DLQ</dead-letter-address>
<expiry-address>ExpiryQueue</expiry-address>
<redelivery-delay>0</redelivery-delay>
<!-- with -1 only the global-max-size is in use for limiting -->
<max-size-bytes>-1</max-size-bytes>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
<address-full-policy>PAGE</address-full-policy>
<auto-create-queues>true</auto-create-queues>
<auto-create-addresses>true</auto-create-addresses>
<auto-create-jms-queues>true</auto-create-jms-queues>
<auto-create-jms-topics>true</auto-create-jms-topics>
</address-setting>
<address-setting match="jms.queue.to-am">
<dead-letter-address>DLQ</dead-letter-address>
<expiry-address>ExpiryQueue</expiry-address>
<redelivery-delay>60000</redelivery-delay>
<max-delivery-attempts>3</max-delivery-attempts>
<redelivery-delay-multiplier>2.0</redelivery-delay-multiplier>
<!-- with -1 only the global-max-size is in use for limiting -->
<max-size-bytes>-1</max-size-bytes>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
<address-full-policy>PAGE</address-full-policy>
<auto-create-queues>true</auto-create-queues>
<auto-create-addresses>true</auto-create-addresses>
<auto-create-jms-queues>true</auto-create-jms-queues>
<auto-create-jms-topics>true</auto-create-jms-topics>
</address-setting>
<address-setting match="jms.queue.am-to-any">
<expiry-address/>
<expiry-delay>10000</expiry-delay>
<redelivery-delay>60000</redelivery-delay>
<max-delivery-attempts>3</max-delivery-attempts>
<redelivery-delay-multiplier>2.0</redelivery-delay-multiplier>
<!-- with -1 only the global-max-size is in use for limiting -->
<max-size-bytes>-1</max-size-bytes>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
<address-full-policy>PAGE</address-full-policy>
<auto-create-queues>true</auto-create-queues>
<auto-create-addresses>true</auto-create-addresses>
<auto-create-jms-queues>true</auto-create-jms-queues>
<auto-create-jms-topics>true</auto-create-jms-topics>
</address-setting>
<address-setting match="jms.topic.chlog">
<dead-letter-address>DLQ</dead-letter-address>
<expiry-address>ExpiryQueue</expiry-address>
<redelivery-delay>60000</redelivery-delay>
<max-delivery-attempts>3</max-delivery-attempts>
<redelivery-delay-multiplier>2.0</redelivery-delay-multiplier>
<!-- with -1 only the global-max-size is in use for limiting -->
<max-size-bytes>-1</max-size-bytes>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
<address-full-policy>PAGE</address-full-policy>
<auto-create-queues>true</auto-create-queues>
<auto-create-addresses>true</auto-create-addresses>
<auto-create-jms-queues>true</auto-create-jms-queues>
<auto-create-jms-topics>true</auto-create-jms-topics>
</address-setting>
<address-setting match="DLQ">
<expiry-address/>
<expiry-delay>172800000</expiry-delay> <!-- 2 days -->
</address-setting>
</address-settings> |
Блок кода | ||
---|---|---|
| ||
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# nano /etc/selinux/config
Поправить в файле параметр:
SELINUX=disabled |
1.9. Проверить значение параметра max-disk-usage в broker.xml, пример расположения /opt/broker/etc/
Блок кода | ||
---|---|---|
| ||
<!-- once the disk hits this limit the system will block, or close the connection in certain protocols
that won't support flow control. -->
<max-disk-usage>90</max-disk-usage> |
Скорректировать его при необходимости. Данный параметр регулирует блокировку обращений к брокеру, когда дисковое пространство меньше указанного значения в %.
То есть, если свободного пространства на дисках будет меньше 90%, как указано выше, то сервер приложений с СМ не сможет достучаться до Брокера. В логе будут ошибки вида:
Раскрыть | ||
---|---|---|
| ||
2020-01-10 12:23:42,472 WARN [org.apache.activemq.artemis.core.client] (pool-12-thread-1) AMQ212054: Destination address=jms.topic.ClusterNotificationTopic is blocked. If the system is configured to block make sure you consume messages on this configuration. . . 2020-01-10 12:24:07,160 WARN [org.infinispan.configuration.parsing.Parser80] (ServerService Thread Pool -- 88) ISPN000383: The eviction max-entries attribute has been deprecated. Please use the size attribute instead |
2. Запуск брокера.
Настройка службы и добавление ее в автозапуск (брокер будет запускаться перед wildfly, если установка обоих компонентов выполнялась на одном сервере):
nano /etc/systemd/system/artemis.service
Содержимое artemis.service:
Блок кода | ||||
---|---|---|---|---|
| ||||
[Unit]
Description=Artemis Server
After=syslog.target network.target
Before=wildfly.service
[Service]
User=root
PIDFile=/opt/broker/data/artemis.pid
ExecStart=/opt/broker/bin/artemis-service start
ExecStop=/opt/broker/bin/artemis-service stop
StandardOutput=null
[Install]
WantedBy=multi-user.target |
Теперь, для старты / остановки / проверки статуса службы необходимо использовать команды:
systemctl start artemis
systemctl stop artemis
systemctl status artemis
Добавление службы в автозагрузку:
systemctl enable artemis
3. Создание скрипта
Создаем .sh скрипт на сервере Artemis MQ (к примеру, /opt/artemis.sh) и запускаем его.
Предупреждение |
---|
Для запуска скрипта необходимо, чтобы брокер был запущен! |
Выполнить переход в каталог /opt, создать .sh скрипт:
`hostname` - параметр по умолчанию редактировать не нужно. Но, если возникнет ошибка при исполнении скрипта, то место `hostname` указать ip сервера установки Artemis MQ.
61616 - порт, используемый по умолчанию. Указан в конфиге broker.xml, пример расположения /opt/broker/etc, блок <acceptor name="artemis"..</acceptor>
Блок кода | ||||
---|---|---|---|---|
| ||||
host=tcp://`hostname`:61616
topics="ConfigurationUpdateTopic ClusterNotificationTopic chlog am-to-many"
queues="ClusterNotificationDelayQueue cmjBusinessQueue am-to-any to-am"
for t in $topics; do
/opt/artemis/bin/artemis address create \
--multicast \
--no-anycast \
--name jms.topic.$t \
--url $host
done
for q in $queues; do
/opt/artemis/bin/artemis queue create \
--anycast \
--no-durable \
--preserve-on-no-consumers \
--auto-create-address \
--address jms.queue.$q \
--name jms.queue.$q \
--url $host
done |
Примечание |
---|
Важно: нельзя выделять для копирования содержимое скрипта двойным кликом, иначе в строки будут добавлены некорректные пробелы |
Сохранить скрипт, выдать права на запуск:
Блок кода | ||
---|---|---|
| ||
[root@host_artemis opt]# chmod 777 ./artemis.sh |
Выполнить запуск скрипта .sh:
Блок кода |
---|
[root@host_artemis opt]# ./artemis.sh |
Раскрыть | ||
---|---|---|
| ||
[root@localhost opt]# ./artemis.sh |
4. Дополнительные настройки с учетом использования отложенных очередей
4.1. Настройки в broker.xml
В broker.xml должно быть добавлено 2 блока(после выполнения настроек брокер необходимо перезапустить):
Блок кода | ||
---|---|---|
| ||
<diverts>
<divert name="chlog-delayed-divert">
<routing-name>chlog-delayed-divert</routing-name>
<address>jms.topic.chlog</address>
<forwarding-address>jms.topic.chlog-delayed</forwarding-address>
<transformer>
<class-name>ru.intertrust.artemis.server.transformer.DelayDeliveryTransformer</class-name>
<property key="delay" value="15000"/> <!-- 15 сек.-->
</transformer>
<exclusive>false</exclusive>
</divert>
</diverts> |
и
Блок кода | ||
---|---|---|
| ||
<address-setting match="jms.topic.chlog-delayed">
<dead-letter-address>DLQ</dead-letter-address>
<expiry-address>ExpiryQueue</expiry-address>
<redelivery-delay>15000</redelivery-delay>
<max-delivery-attempts>5</max-delivery-attempts>
<redelivery-delay-multiplier>1.0</redelivery-delay-multiplier>
<!-- with -1 only the global-max-size is in use for limiting -->
<max-size-bytes>-1</max-size-bytes>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
<address-full-policy>PAGE</address-full-policy>
<auto-create-queues>true</auto-create-queues>
<auto-create-addresses>true</auto-create-addresses>
<auto-create-jms-queues>true</auto-create-jms-queues>
<auto-create-jms-topics>true</auto-create-jms-topics>
</address-setting> |
4.2. Положить в папку lib delay-delivery-transformer.jar
4.3. Настройки в интерфейсе менеджера агентов
Создать ещё одну JMS-Очередь с названием jms.topic.chlog-delayed
Данную очередь необходимо выбрать в настройке запуска
4.4. Скрипт создания топика на брокере
После выполнения настроек(или можно заранее), если топик chlog-delayed не создался автоматически, выполнить скрипт для создания
Блок кода | ||
---|---|---|
| ||
host=tcp://`hostname`:61616
topics="chlog-delayed"
/opt/artemis/bin/artemis address create \
--multicast \
--no-anycast \
--name jms.topic.chlog-delayed \
--url $host |
5. Интерфейс брокера
Войти в интерфейс брокера можно по ссылке
http://host_artemis.inttrust.ru:port_atemis/console/login
см. пункт 1.6 - в нем задается порт для доступа к веб-интерфейсу брокера.
Вид интерфейса: