2013-10-24 2 views
19

Мы используем Spring (3.2.4) с ActiveMQ (5.8.0) в Tomcat (7.0.41), и неясно, какое лучшее использование. Мы хотим использовать JmsTemplate для создания сообщений и MessageListenerContainer для получения сообщений.

Следует ли использовать кеширование в приемнике? (related link)
Работы CachingConnectionFactory с ActiveMQ и откатом? (related link)
Нужно установить useAsyncSend = "true", когда мы используем PooledConnectionFactory? (related link)
Что лучше: PooledConnectionFactory или CachingConnectionFactory?

+0

Я использовал CachingConnectionFactory для производства сообщений (JmsTemplate) и потребления (DefaultMessageListenerContainer) в течение более года с весны (3.0.7), ActiveMQ (5.5.0) и Tomcat, а не испытывали каких-либо проблем. Как правило, мой потребитель обрабатывает сообщение из queue_1 и заканчивает публикацию сообщения queue_2, но взаимодействие в очереди использует тот же CachingConnectionFactory. – shuttsy

ответ

30

От here:

Разница между PooledConnectionFactory и CachingConnectionFactory разница в реализации. Ниже приведены некоторые из характеристик, которые отличаются между ними:

  • Хотя оба PooledConnectionFactory и состояние CachingConnectionFactory, что они каждый пул соединений, сессий и производителей, PooledConnectionFactory не создает кэш нескольких производителей. Он просто использует шаблон singleton для раздачи одного кэшированного производителя при запросе. В то время как CachingConnectionFactory фактически создает кеш, содержащий несколько производителей, и раздаёт один производитель из кеша при запросе.

  • PooledConnectionFactory построен на основе проекта Apache Commons Pool для объединения JMS-сессий. Это позволяет некоторое дополнительное управление пулом, поскольку в Commons Pool есть функции, которые не используются PooledConnectionFactory. Эти дополнительные функции включают в себя увеличение размера пула, а не блокирование, исключение при запуске пула и т. Д. Вы можете использовать эти функции, создав свой собственный Commons Pool GenericObjectPool, используя свои собственные настраиваемые параметры, а затем передав этот объект в PooledConnectionFactory через комплектPoolFactory способ. Для получения дополнительной информации см. Следующие сведения: http://commons.apache.org/pool/api-1.4/org/apache/commons/pool/impl/GenericObjectPoolFactory.html

  • CachingConnectionFactory также может кэшировать потребителей. Просто нужно проявлять осторожность при использовании этой функции, чтобы вы знали, что потребители кэшируются в соответствии с правилами, указанными в сообщении в блоге.

  • Но самое главное, CachingConnectionFactory будет работать с любой совместимой с JMS MOM. Для этого требуется только фабрика JMS-соединений. Это важно, если вы используете более одного поставщика MOM, который очень распространен в корпоративных организациях (в основном это связано с наследием и существующими проектами). Важным моментом является то, что CachingConnectionFactory отлично работает со многими различными реализациями MOM, а не только с ActiveMQ.

От here:

  • Если вы группировались ActiveMQs, и использование отказоустойчивых транспорта было сообщено, что CachingConnectionFactory не является правильным выбором.

  • Проблема у меня в том, что если одна коробка идет вниз, мы должны начать отправки сообщений на другой, но, кажется, все еще используя старый соединение (каждый раз посылать вне). Если я перезапущу программу, будет снова подключиться, и все будет работать.Источник: Autoreconnect problem with ActiveMQ and CachingConnectionFactory

  • Проблема заключается в том, что кэшированные соединения с неисправным ActiveMQ было еще в использовании и создали проблему для пользователя. Теперь для этого варианта является PooledConnectionFactory.

  • Если вы используете ActiveMQ сегодня, и есть вероятность, что вы можете переключиться на какой-то другой брокер (JBoss MQ, WebSphere MQ) в будущем, не используйте PooledConnectionFactory, как это плотно пары ваш код ActiveMQ.

+0

Это хорошее общее описание двух фабрик, но я бы добавил несколько комментариев: Должны ли мы использовать кеширование в стороне приемника? Я нашел в ActiveMQ в книге действий, что это необязательно. Работы CachingConnectionFactory с ActiveMQ и откатом? Ссылка «Autoreconnect problem ...» содержит 2 противоположных ответа, но кажется, что PooledConnectionFactory определенно будет работать, поэтому мы будем использовать это (мы не планируем использовать другую MOM). Нужно установить useAsyncSend = "true", когда мы используем PooledConnectionFactory? Мы все еще не знаем, но это не должно быть проблемой, если он установлен. :) – Krayo

+0

Async отправляет: сообщает продюсеру, чтобы он не блокировал ожидание ack для каждое отправленное сообщение: http://activemq.apache.org/async-sends.html (думаю, это не должно быть проблемой) – united

+0

I подумайте, что лучше задавать новые вопросы в другом вопросе;) – united

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