javax.jms.TeilitaryTopic.delete() блокируется на неопределенный срок, если брокер недоступен
Я настроил брокера ActiveMQ с аварийным переключением. Любое сообщение, которое отправляется в режиме запроса с превышением времени ожидания, удаляет временную тему, созданную для прослушивания ответа. Теперь же мой брокер становится недоступным, и при удалении временного ветки тема блокируется на неопределенный срок по адресу javax.jms.TeilitaryTopic.delete(). Пожалуйста, помогите, если кто-то испытал, чтобы избежать этого.
1 ответ
Насколько я помню, ваш единственный вариант - настроить отказоустойчивый транспорт, чтобы он прекратил попытки повторного подключения после определенного числа попыток. Время между попытками также может быть настроено, так что вы можете управлять им до некоторой степени.
Я тоже сейчас сталкиваюсь с этой проблемой. Пока это мои выводы анализа.
Чтобы избежать блокировки навсегда, когда брокер недоступен во время удаления темы Temp или отправки сообщений.
Предложение-1:
Использовать maxReconnectAttempts=2
Параметр URL-адреса брокера, как показано ниже.
failover:(tcp://localhost:61616?wireFormat.maxInactivityDuration=120000)?maxReconnectAttempts=2
Соединение будет прервано, когда оно попытается восстановить соединение в определенное время. Поэтому после этого вам нужно воссоздать соединение.
Предложение-2:
Использовать timeout=2000
Параметр URL-адреса брокера, как показано ниже.
failover:(tcp://localhost:61616?wireFormat.maxInactivityDuration=120000)?timeout=2000
Соединение не истечет. Мы можем повторно использовать то же соединение и сеанс, когда брокер станет доступен.
Кажется, что Предложение 2 будет более полезным, потому что мы будем повторно использовать одно и то же соединение и сеанс.
Я отправлю сообщение, если найду более эффективное решение для этой ситуации. Спасибо.