Solace JMS Consumer остановлен после повторного подключения - PullRequest
0 голосов
/ 24 апреля 2018

Я использую утешение в качестве JMS-провайдера в моем проекте.Я использую Spring CachingConnectionFactory для извлечения соединения.На этой связи я создаю новую сессию.У меня есть поток с одним получателем, созданным в этом сеансе.

@Autowired
CachingConnectionFactory ccf;
Connection connection = ccf.createConnection();
Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
MessageConsumer messageConsumer = new session.createConsumer(destination); // This is passed to new thread

Я делаю несколько тестов восстановления после отказа.Когда я отключаю сервер от сетевого подключения, происходит сбой.Когда я снова подключаюсь к серверу, я все еще получаю то же исключение:

javax.jms.IllegalStateException: Error receiving message - already closed (Tried to call receive on a stopped message consumer.) ...

Более того, CachingConnectionFactory имеет свойство "reconnectOnException", установленное по умолчанию в "true" (и я проверил, что это работает).

Исключение кажется очевидным.Итак, мой вопрос: как обработать такой случай / исключение, когда соединение теряется и устанавливается снова?Возможно ли снова иметь живого потребителя?Или я должен создать нового потребителя и новую тему (чего я бы хотел избежать)?

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Как правило, CachingConnectionFactory может поддерживать автоматическое переподключение через onException ().Но использованный потребитель также должен быть восстановлен после повторного подключения.

Вы можете использовать / использовать пружины DefaultMessageListenerContainer или SimpleMessageListenerContainer, например, SimpleMessageListenerContainer:

enter image description here

0 голосов
/ 24 апреля 2018

Свойство reconnectOnException попытается выполнить одно повторное подключение после получения исключения.Вполне вероятно, что это переподключение завершится неудачно, поскольку восстановление после сбоя все еще выполняется.

Можно настроить API-интерфейс Solace на попытку многократного повторного подключения с помощью свойств «Повторная попытка повторного подключения» и «Ожидание повторного подключения» в соединении JNDI.завод.Это настраивается на маршрутизаторе Solace через SolAdmin или CLI.Если вы настраиваете свое приложение на повторное подключение достаточно долго, чтобы установить соединение, вы не должны сталкиваться с какими-либо исключениями.В противном случае вам потребуется снова создать сеанс и получателя при получении этого исключения.

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