Я бы порекомендовал иметь пул bean-компонентов без сохранения состояния, которые активны все время (т.е. они не запланированы), которые потребляют установленное количество сообщений (т.е. не до тех пор, пока очередь не станет пустой, что будет произвольным числом сообщений) изатем, которые вставляют данные из этих сообщений в одну операцию базы данных.
Все бины в пуле могут быть активны одновременно и могут использовать и вставлять свои пакеты как можно быстрее.Это обеспечит своевременное использование сообщений, что, как мы надеемся, позволит избежать накопления сообщений в очереди.
Вы можете установить тайм-аут на receive
, чтобы, если вы действительно достигнете концаочередь до того, как будет достигнут размер пакета, данные будут по-прежнему вставляться своевременно.
Для того, чтобы начать этот процесс при запуске сервера приложений, вы можете пометить компонент с помощью @Startup
и @Singleton
изатем аннотируйте метод с помощью @PostConstruct
, который зацикливается достаточно времени, чтобы заполнить ваш «пул», и вызывает метод для вашего компонента @Stateless
, который будет получать пакеты сообщений и обрабатывать их.