ActiveMQ прекращает получать сообщения после нескольких часов простоя серверов - PullRequest
0 голосов
/ 26 марта 2019

Я просматривал форумы последние несколько дней и перепробовал почти все, что смог найти, но безуспешно.

Ситуация такова: внутри нашего Java-приложения у нас есть ActiveMQ 5.7 (я знаю, что он очень старый, в итоге мы перейдем на более новую версию - но по некоторым причинам это сейчас невозможно). У нас только один брокер и несколько потребителей.

Когда я запускаю серверы (я пытался сделать это для 2, 3, 4 и более серверов), все в порядке. Серверы соединяются друг с другом, сообщения QUEUE потребляются мгновенно. Но когда я оставляю серверы без дела (например, чтобы наконец-то немного поспать;)), это уже не так. Сообщения хранятся в базе данных и не используются. Единственный вариант их доставки - перезапустить сервер.

Часть моей конфигурации (мы сохраняем ее в файле свойств, это фактическое состояние, однако я пробовал много разных комбинаций):

BrokerServiceURI=broker:(tcp://0.0.0.0:{0})/{1}?persistent=true&useJmx=false&populateJMSXUserID=false&useShutdownHook=false&deleteAllMessagesOnStartup=false&enableStatistics=true 
ConnectionFactoryURI=failover://({0})?initialReconnectDelay=100&timeout=6000 
ConnectionFactoryServerURI=tcp://{0}:{1}?keepAlive=true&soTimeout=100&wireFormat.cacheEnabled=false&wireFormat.tightEncodingEnabled=false&wireFormat.maxInactivityDuration=0 
BrokerService.startAsync=true 
BrokerService.networkConnectorStartAsync=true 
BrokerService.keepDurableSubsActive=false

У вас есть подсказка?

1 Ответ

0 голосов
/ 03 апреля 2019

Я не могу на самом деле сказать вам причину из приведенного выше описания, но я могу перечислить несколько проверок, которые свежи в моей памяти. Пожалуйста, подтвердите следующее, если они действительны для вас или нет.

  1. Можете ли вы проверить связь с потребителем?
  2. Сеансы потребителей все еще активны?
  3. Если все потребительские соединения установлены, то проверьте дамп потока, находятся ли активные потребительские потоки (я предполагаю, что вы создали потребительские потоки, исправьте меня, если я ошибаюсь) в состоянии RUNNING или WAITING (это произошло со мной, где все потребители были активны, но какой-то другой поток удерживал блокировку на Logger, когда отправлял сообщение в Slack, и потребители находились в состоянии ОЖИДАНИЯ) из-за какого-то другого потока на сервере).
  4. Проверьте размер очереди отправки для каждого потребителя. Проверьте предварительную выборку каждого потребителя, а затем сравните размер очереди отправки с предварительной выборкой, см.
  5. Есть ли JMSXGroupID, который вы выделяете для каждого сообщения?

Не могли бы вы рассказать немного больше о конфигурации вашего потребителя / производителя / брокера?

...