Как вы можете определить, когда java.jms.TopicSubscriber теряет соединение с брокером сообщений? - PullRequest
0 голосов
/ 10 августа 2011

Я экспериментировал с объектом TopicSubscriber сегодня (с ActiveMQ в качестве моего брокера сообщений и JMS-провайдера). Я обнаружил, что если я инициировал синхронный прием (с таймаутом в 2 мс) после установления соединения, то возникнет исключение, если я остановлю ActiveMQ между установлением соединения с ним и инициацией первого приема. Но если я установил соединение, то получил успешное получение, затем остановил посредника, а затем сделал второе получение, что вместо того, чтобы сгенерировать исключение для этого приема, я постоянно получал нулевое сообщение обратно - без указания того, что соединение с брокер был потерян - даже после ожидания пару часов. И затем, после перезапуска ActiveMQ, если моя программа не закроет и не возобновит свое подключение к нему, ни один из ее приемов не будет работать.

Я знаю, что могу обойти это, но мне интересно, пропустил ли я что-то, если я знаю, как определить, потеряно ли мое соединение - пожалуйста, скажите, есть ли способ, или это просто " особенность "реализации JMS ActiveMQ, которую мне нужно кодировать вокруг.

1 Ответ

1 голос
/ 10 августа 2011

Я использую ActiveMQ в течение нескольких лет, хотя с очередями, а не с темами, и я никогда не видел такого поведения. Возможно, я мог видеть, что если соединение было прервано, а брокер не смог должным образом отключить потребителя, то потребитель мог бы не сразу знать о проблеме. Я не знаю наверняка, но я думаю, что потребители ActiveMQ мало общаются с брокером после установления соединения. Они просто ждут доставки сообщений. Тем не менее, я ожидаю, что будет какое-то сердцебиение, и на странице Формат OpenWire это подразумевает, что OpenWire имеет 30-секундное время простоя по умолчанию. Попробуйте выполнить сетевой мониторинг, чтобы узнать, пытается ли потребитель когда-либо что-либо отправить. Если это происходит и все еще не распознает, что связь мертва, то происходит что-то подозрительное. В противном случае, это, вероятно, просто вопрос поиска правильного способа поддержания жизни. TCPTransport keepalive etting также может быть полезным для изучения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...