Существует приложение Java EE, в котором у нас есть партии заданий для обработки. Обработка включает вызов внешней службы с ограничением, так что мы можем одновременно отправлять только N количество запросов. Это узкое место должно быть реализовано в нашей прикладной логике, и мне интересно, как мы можем достичь этого наилучшим образом. К счастью, кластеризация не является обязательным требованием, поэтому мы можем ограничить проблему одним экземпляром сервера.Ограничить одновременное использование ресурсов в приложении Java EE
Моя первая идея состоит в том, использует
ExecutorService
подкрепленнаяThreadPool
с N рабочей темы, так чтоThreadPool
объект будет выступать в качестве регулятора. Конечно, это не решение для ЭЭ.Моя вторая идея будет каким-то образом настройки такой
ThreadPool
в контейнер и использовать это, но я не нашел каких-либо функции, как этого до сих пор.Третья идея заключается в использовании объекта
Semaphore(N)
в@Singleton
EJB.Четвертая идея заключается в создании ограниченного пула сессионных bean-компонентов без состояния без учета состояния и предоставления доступа к ограниченному ресурсу в них. Как количество боба управляется контейнером, использование ресурсов будет быть ограниченно, а
(Для уточнения: общее решение будет лучшим, но известно, что мы бежим на Glassfish 3.1.1 и, возможно, позже на JBoss 6.x)
Не могли бы вы предложить мне хорошую архитектуру для этой проблемы и/или прокомментировать мои идеи, чтобы помочь моему решению?
Другие идеи по-прежнему приветствуются :-) – jabal