Управление сервером JMS: создано слишком много компонентов MDBean (веб-логика)

У меня есть приложение, которое выполняет отложенную операцию. Пользователь создает 1 миллион сообщений, которые хранятся в очереди JMS, а затем компоненты MDBean используют эти сообщения, выполняют некоторые действия и сохраняют данные в базе данных. Поскольку JMS Queue работает слишком быстро, он пытается создать 1 миллион экземпляров MDBean, которые, в свою очередь, пытаются создать 1 миллион подключений к базе данных. Неудивительно, что время ожидания некоторых из них истекает, поскольку пул соединений JDBC не может обслужить 1 миллион запросов на соединение.

Какое лучшее решение для контроля количества созданных компонентов MDBean? Было бы лучше, если бы 1 миллион сообщений обрабатывался определенным количеством MDBean, не превышающим количество разрешенных соединений в пуле JDBC.


person Alex    schedule 22.04.2009    source источник


Ответы (1)


Вы можете ограничить количество экземпляров вашей MDB, используя элемент max-beans-in-free-pool в дескрипторе вашего компонента в файле weblogic-ejb-jar.xml.

<message-driven-descriptor>
   <pool>
      <max-beans-in-free-pool>100</max-beans-in-free-pool>
      <initial-beans-in-free-pool>50</initial-beans-in-free-pool>
   </pool>
   ...
</message-driven-descriptor>

Если не указать, количество созданных экземпляров будет ограничено только количеством доступных потоков. Несмотря на это, рекомендуется устанавливать максимальное количество потоков равным или меньшим размера пула соединений вашей базы данных.

person Chris Thornhill    schedule 22.04.2009