#java #activemq
#java #activemq
Вопрос:
Последние несколько дней я просматривал форумы и перепробовал почти все, что смог найти, но безуспешно.
Ситуация такова: внутри нашего веб-приложения Java у нас есть ActiveMQ 5.7 (я знаю, что он очень старый, в конечном итоге мы обновимся до более новой версии — но по некоторым причинам это сейчас невозможно). У нас только один брокер и несколько потребителей.
Когда я запускаю серверы (я пытался сделать это для 2, 3, 4 и более серверов), все в порядке. Серверы обмениваются данными друг с другом, сообщения из ОЧЕРЕДИ обрабатываются мгновенно. Но когда я оставляю серверы простаивающими (например, чтобы, наконец, немного поспать ;)), это больше не так. Сообщения застревают в базе данных и не используются. Единственный вариант их доставки — перезапустить сервер.
Часть моей конфигурации (мы сохраняем ее в файле свойств, это фактическое состояние, однако я перепробовал много разных комбинаций):
BrokerServiceURI=broker:(tcp://0.0.0.0:{0})/{1}?persistent=trueamp;useJmx=falseamp;populateJMSXUserID=falseamp;useShutdownHook=falseamp;deleteAllMessagesOnStartup=falseamp;enableStatistics=true
ConnectionFactoryURI=failover://({0})?initialReconnectDelay=100amp;timeout=6000
ConnectionFactoryServerURI=tcp://{0}:{1}?keepAlive=trueamp;soTimeout=100amp;wireFormat.cacheEnabled=falseamp;wireFormat.tightEncodingEnabled=falseamp;wireFormat.maxInactivityDuration=0
BrokerService.startAsync=true
BrokerService.networkConnectorStartAsync=true
BrokerService.keepDurableSubsActive=false
У вас есть ключ к разгадке?
Ответ №1:
На самом деле я не могу назвать вам причину из описания, упомянутого выше, но я могу перечислить несколько проверок, которые свежи в моей памяти. Пожалуйста, подтвердите следующее, если они действительны для вас или нет.
- Можете ли вы проверить подключения потребителей?
- Сеансы потребителя все еще активны?
- Если все потребительские соединения установлены, то проверьте дамп потока, находятся ли активные потребительские потоки (я предполагаю, что вы создали потребительские потоки, поправьте меня, если я ошибаюсь) в запущенном или ОЖИДАЮЩЕМ состоянии (это произошло со мной, когда все потребители были активны, но какой-то другой поток блокировал Logger при отправке сообщения в slack, а потребители находились в состоянии ОЖИДАНИЯ) из-за какого-то другого потока на сервере).
- Проверьте размер очереди отправки для каждого потребителя. Проверьте предварительную выборку каждого потребителя, а затем сравните размер очереди отправки с предварительной выборкой, см.
- Есть ли JMSXGroupID, который вы выделяете для каждого сообщения?
Можете ли вы рассказать немного больше о ваших конфигурациях потребителя / производителя / брокера?