Дерево страниц
Skip to end of metadata
Go to start of metadata

Если выполняется рестарт брокера, то после его включения, необходимо проверить наличие подписчика на очередях. Если подписчика нет, то необходимо перезапустить сервер приложений с СМ.

Содержание

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

/opt/broker/etc/bootstrap.xml
<web bind="http://host:port" path="web">

Указать в файле jolokia-access.xml, пример расположения /opt/broker/etc/, набор подсетей для доступа к веб-интерфейсу:

К примеру, если доступ нужен только из сети интертраст:

/opt/broker/etc/jolokia-access.xml
<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>
1.8. Выключить firewalld (у заказчиков, у кого разрешено выключение. Если выключать нельзя необходимо попросить заказчика прописать исключения)
[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:23:52,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
2020-01-10 12:24:07,161 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:

Содержимое 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>

Содержание artemis.sh
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
Address [name=jms.topic.ConfigurationUpdateTopic, routingTypes={MULTICAST}, autoCreated=false] created successfully.
Address [name=jms.topic.ClusterNotificationTopic, routingTypes={MULTICAST}, autoCreated=false] created successfully.
Address [name=jms.topic.chlog, routingTypes={MULTICAST}, autoCreated=false] created successfully.
Queue [name=jms.queue.ClusterNotificationDelayQueue, address=jms.queue.ClusterNotificationDelayQueue, routingType=ANYCAST, durable=false, purgeOnNoConsumers=false, autoCreateAddress=false, exclusive=false, lastValue=false, lastValueKey=null, nonDestructive=false, consumersBeforeDispatch=0, delayBeforeDispatch=-1, autoCreateAddress=false] created successfully.
Queue [name=jms.queue.cmjBusinessQueue, address=jms.queue.cmjBusinessQueue, routingType=ANYCAST, durable=false, purgeOnNoConsumers=false, autoCreateAddress=false, exclusive=false, lastValue=false, lastValueKey=null, nonDestructive=false, consumersBeforeDispatch=0, delayBeforeDispatch=-1, autoCreateAddress=false] created successfully.

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 - в нем задается порт для доступа к веб-интерфейсу брокера.

Вид интерфейса:

  • Нет меток