У меня проблема со следующей настройкой:
Приложение Java отправляет сообщение электронной почты в очередь JMS, затем MDB, прослушивающий очередь, получает сообщение электронной почты с помощью метода onMessage, оно открывает соединение на SMTP Gmail, отправляет электронное письмо на SMTP и закройте соединение. Выполнение этого для всех сообщений в очереди JMS.
Это отлично работает, когда у меня в очереди одновременно находится до 5 сообщений. Все сообщения принимаются одновременно 5 разными экземплярами MDB, поэтому у меня есть 5 одновременных подключений к SMTP-серверу Gmail. Но когда в очереди JMS появляется больше сообщений, я получаю сообщение об ошибке подключения от SMTP-сервера Gmail. 5 первых сообщений отправлены правильно, но не остальная часть группы, поэтому другие сообщения теряются, потому что они больше не находятся в очереди.
Итак, мой вопрос: можно ли ограничить количество экземпляров MDB, которые будет слушать очередь JMS? Если у меня есть максимум 5 MDB, то, даже если у меня в очереди 1000 сообщений, очистка очереди займет больше времени, но, по крайней мере, я не потеряю ни одного сообщения.
[Сервер] Идентификатор выпуска: JBoss [Trinity] 4.2.3.GA (сборка: SVNTag = JBoss_4_2_3_GA date = 200807181417)
, а конфигурация MDB следующая:
@MessageDriven(activationConfig = {
@ActivationConfigProperty( propertyName = "destinationType", propertyValue = "javax.jms.Queue" ),
@ActivationConfigProperty( propertyName = "destination", propertyValue = "queue/emailQueue")
})
Вам нужно больше?
Спасибо
ИЗМЕНИТЬ 14.02.2011
Может я ошибаюсь, желая ограничить количество экземпляров MDB. Я видел конфиг о количестве потоков JMS. Если я ограничу количество веток, которые будут публиковать в MDB, может быть, это решит мою проблему? Будет ли JMS ждать, пока MDB будет доступен, прежде чем снова отправлять сообщение? Есть ли у этого побочные эффекты? Пожалуйста, подумайте.
Спасибо
КОНЕЦ РЕДАКТИРОВАНИЯ