У меня возникла проблема со следующей настройкой:
Приложение Java отправляет сообщение электронной почты в очередь JMS, затем MDB, слушая очередь, получает сообщение электронной почты с помощью метода onMessage, открывает соединение с SMTP Gmail, отправляет электронное письмо на SMTP и закрывает соединение. Выполнение этого во всех сообщениях в очереди JMS.
Он отлично работает, когда у меня одновременно есть до 5 сообщений. Все сообщения одновременно выбираются 5 различными экземплярами MDB, поэтому у меня есть 5 одновременных подключений к SMTP-серверу Gmail. Но когда в очереди JMS появляется больше сообщений, я получаю сообщение об ошибке с SMTP-сервера Gmail. 5 первых сообщений отправляются правильно, но не остальная часть связки, поэтому другие сообщения теряются, потому что они больше не находятся в очереди.
Итак, мой вопрос: возможно ли ограничить число экземпляров MDB, которые будут прослушивать очередь JMS? Если у меня не более 5 MDB, то даже если у меня есть 1000 сообщений в очереди, для опорожнения очереди потребуется больше времени, но, по крайней мере, я не потеряю какое-либо сообщение.
Любое другое предложение для решения этой проблемы было бы очень оценено.
Вот версия Jboss:
[Сервер] Идентификатор выпуска: 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")
})
Вам нужно больше?
Спасибо
EDIT 2011-02-14
Возможно, я ошибаюсь, желая ограничить число экземпляров MDB. Я видел конфигурацию о количестве потоков JMS. Если я ограничу количество потоков, которые будут отправляться в MDB, возможно, это решит мою проблему? Будет ли JMS ждать, пока MDB не будет доступен, прежде чем отправлять сообщение снова? Есть ли побочный эффект? Пожалуйста, пожалуйста.
Благодаря
END EDIT