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 будет более полезным, потому что мы будем повторно использовать одно и то же соединение и сеанс.

Я отправлю сообщение, если найду более эффективное решение для этой ситуации. Спасибо.

Другие вопросы по тегам