Управление сервером JMS: создано слишком много MDBeans (weblogic) - PullRequest
1 голос
/ 22 апреля 2009

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

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

1 Ответ

1 голос
/ 22 апреля 2009

Вы можете ограничить количество экземпляров вашего MDB, используя элемент max-beans-in-free-pool в дескрипторе вашего bean-компонента в 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>

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

...