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 |
Настройка службы и добавление ее в автозапуск (брокер будет запускаться перед 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
Создаем .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.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 |
Войти в интерфейс брокера можно по ссылке
http://host_artemis.inttrust.ru:port_atemis/console/login
см. пункт 1.6 - в нем задается порт для доступа к веб-интерфейсу брокера.
Вид интерфейса: