В случайное время очередь моста кластера $.artemis.internal.sf
накапливает сообщения, как будто мост завис. Другие очереди с удовольствием принимают сообщения и потребляют их, как и ожидалось, даже под нагрузкой.
В производстве установка следующая:
artm has masterA-S1, masterA-S2, masterA-S3 and slaveB-S1, slaveB-S2, slaveB-S3
arts has masterB-S1, masterB-S2, masterB-S3 and slaveA-S1, slaveA-S2, slaveA-S3
artim has masterA-D1, masterA-D2, masterA-D3 and slaveB-D1, slaveB-D2, slaveB-D3
artis has masterB-D1, masterB-D2, masterB-D3 and slaveA-D1, slaveA-D2, slaveA-D3
Соединения кластера следующие
мастерA-D1
<cluster-connections>
<cluster-connection name = "cluster-D1">
<connector-ref>connector-D1-master-a</connector-ref>
<check-period>1000</check-period>
<connection-ttl>20001</connection-ttl>
<initial-connect-attempts>-1</initial-connect-attempts>
<reconnect-attempts>1</reconnect-attempts>
<use-duplicate-detection>true</use-duplicate-detection>
<message-load-balancing>ON_DEMAND</message-load-balancing>
<max-hops>1</max-hops>
<notification-interval>2000</notification-interval>
<notification-attempts>2</notification-attempts>
<static-connectors>
<connector-ref>connector-D1-slave-a</connector-ref>
<connector-ref>connector-D1-master-b</connector-ref>
<connector-ref>connector-D1-slave-b</connector-ref>
</static-connectors>
</cluster-connection>
</cluster-connections>
masterB-D1
<cluster-connections>
<cluster-connection name = "cluster-D1">
<connector-ref>connector-D1-master-b</connector-ref>
<check-period>1000</check-period>
<connection-ttl>20001</connection-ttl>
<initial-connect-attempts>-1</initial-connect-attempts>
<reconnect-attempts>1</reconnect-attempts>
<use-duplicate-detection>true</use-duplicate-detection>
<message-load-balancing>ON_DEMAND</message-load-balancing>
<max-hops>1</max-hops>
<notification-interval>2000</notification-interval>
<notification-attempts>2</notification-attempts>
<static-connectors>
<connector-ref>connector-D1-slave-b</connector-ref>
<connector-ref>connector-D1-master-a</connector-ref>
<connector-ref>connector-D1-slave-a</connector-ref>
</static-connectors>
</cluster-connection>
</cluster-connections>
Уровень поверхности имеет в общей сложности около 400 очередей (любая передача) и около 450 для глубокого рычага (также любая передача).
Мост между masterA и masterB подключен правильно. Логи это подтверждают.
Ежедневно вся система обрабатывает около 8-9 миллионов сообщений.
Мы попытались зарегистрировать класс org.apache.activemq.artemis.core.server.cluster.impl.BridgeImpl
в надежде увидеть "Bridge retrying connection #
(что указывало бы на проблему с подключением и требовало увеличения количества попыток повторного подключения), но безуспешно.
Когда происходит наращивание, другие экземпляры по-прежнему ведут себя хорошо.
Мы просто устанавливаем повторные попытки подключения на -1
(неограниченное количество повторных попыток). Подождите и посмотрите, поможет ли это, но я сомневаюсь в этом.
Мы устанавливаем оповещения о количестве сообщений в очереди моста, поэтому, когда происходит наращивание, мы можем перезапустить экземпляры и восстановить потребителя моста, но это не идеально, поскольку мешает нашему сервису.
Другой мост не настроен.
Наращивание не обязательно происходит ни при большой нагрузке, ни при большом времени безотказной работы. Мы видели наращивание с временем безотказной работы 7 дней, тогда как у нас есть другие экземпляры с временем безотказной работы 35+ дней без проблем и с таким же типом использования/трафика.
Мы не можем это воспроизвести. Вот почему я даю столько информации, сколько могу.
Я могу предоставить более подробную информацию, если требуется.
Я нашел это ТАКОЕ, но не уверен, что это связано. Хотя мы отправляем некоторые большие сообщения, это не то, что мы отправляем чаще всего, но я должен предположить, что с учетом нашей настройки мост может пересылать большие сообщения. У нас есть максимум 50 больших сообщений в день по всей системе.
ну, этот говорит 1 МБ activemq.apache.org/components/artemis/documentation/2.22.0/… , а тот activemq.apache.org/components/artemis/documentation/2.22.0/ … говорит -1... код, кажется, говорит -1 (org.apache.activemq.artemis.api.config.ActiveMQDefaultConfigguration#DEFAULT_BRIDGE_PRODUCER_WINDOW_SIZE равен -1). Я запутался :/
извините, старая ссылка из моей IDE. -1 в 2.16, 1024 * 1024 в 2.22, поэтому мы действительно должны установить -1, но документ все еще смущает меня
Спасибо за подтверждение. мы попробуем нашу предварительную подготовку и посмотрим, что мы можем сделать. я буду держать вас в курсе
Любое обновление здесь?
Я считаю, что здесь работает комбинация факторов.
По умолчанию producer-window-size
на cluster-connection
раньше было -1
, но оно было изменено на 1048576
(т. е. 1 МБ) в 2.22.0 через ARTEMIS-3805 . Чтобы было ясно, глава «Кластеры» в документации была обновлена с этим новым значением по умолчанию, но глава «Указатель конфигурации» была пропущена.
Однако, когда была выпущена версия 2.22.0, в управлении потоком была обнаружена неизвестная ошибка, которая могла привести к зависанию моста при перемещении больших сообщений с одного узла на другой. Эта ошибка не была решена до 2.26.0 через ARTEMIS-4003.
Поэтому я считаю, что вы можете решить эту проблему одним из двух способов:
cluster-connection
в broker.xml
:
<producer-window-size>-1<producer-window-size>
Я мог бы воспроизвести проблему в нашей среде preprod, используя несколько больших сообщений. применение вашей рекомендации относительно размера окна производителя решило проблему после перезапуска брокера, несмотря на то, что в журналах говорилось, что конфигурация была перезагружена. Мы планируем применить настройки на производстве сегодня вечером, но НАСТОЯТЕЛЬНО у нас есть работающее решение, так что большое спасибо!
пока нет, мы должны быть уверены, что проблема именно в этом (мы не можем так легко модифицировать производство ;)) Я заметил, что в документе указано -1 является значением по умолчанию для этого параметра. мы все еще должны установить его явно?