2014-08-14 2 views
0

Кажется, что JMSProducer не получает сбор мусора и продолжает жить после доставки сообщений в очередь, я использую Spring 3.2.2 и CachingConnectionFactory с настройкой Keep-alive для отправки сообщения.Производители не очищаются при использовании CachingConnectionFactory

Счетчики постоянно увеличиваются каждый раз, когда я отправляю сообщение.

Связано это с весной версия использую?
или я что-то не так в моей конфигурации?

+0

Это может быть связано с тем, как вы его используете. Некоторый код для показа? – Saket

ответ

1

Вам необходимо позвонить по номеру close() method на свой номер MessageProducer. В соответствии с Документами Java: -

void close() 
      throws JMSException 

Закрывает производителя сообщений.

Поскольку поставщик может выделять некоторые ресурсы от имени MessageProducer за пределами виртуальной машины Java, клиенты должны закрыть их, когда они не нужны. Опираясь на сбор мусора, чтобы в конечном итоге вернуть эти ресурсы, может быть недостаточно своевременным.

В соответствии с пружинной CachingConnectionFactory документы: -

Примечание: Эта ConnectionFactory требует явного закрытия всех сессий , полученных от его общей связи. Это обычная рекомендация для собственного кода доступа JMS в любом случае. Однако с этим ConnectionFactory его использование является обязательным для фактического разрешения Повторное использование сеанса.

Так что вам нужно позвонить getCachedSessionProxy вместо getSession и когда-то сделали с отправкой сообщения вызвать Close() (в блоке, наконец). Согласно исходному коду, закрытый вызов этого прокси-сервера сеанса обрабатывается таким образом, что сеанс и обработчик сообщений повторно используются. В комментариях Гэри говорится то же самое.

+0

Я сомневаюсь, что снова закрытие продюсеров будет влиять на производительность, и при использовании Cachingconnectionfactory он должен работать внутри. –

+0

В этом весь смысл; 'close()' перехватывается, и производитель помещается в кеш вместо фактического закрытия. Завод не может сделать это «автоматически»; приложение должно сообщить об этом, когда это будет сделано (приложение может захотеть создать более одного сообщения за раз). –

+0

@GaryRussell Спасибо Гэри за ваше предложение –

Смежные вопросы