有一个 Java EE 应用程序,我们可以在其中处理成批的作业。处理涉及调用具有限制的外部服务,因此我们只能同时发送 N 个请求。这个瓶颈必须在我们的应用程序逻辑中实现,我想知道我们怎样才能以最好的方式实现这一点。幸运的是,集群不是必需的,因此我们可以将问题限制在单个服务器实例上。
我的第一个想法是使用
ExecutorService
由ThreadPool
具有 N 个工作线程的 a 支持的对象,以便该ThreadPool
对象充当调节器。当然,这不是 EE 解决方案。我的第二个想法是以某种方式
ThreadPool
在容器中配置这样一个并使用它,但到目前为止我还没有找到任何这样的功能。第三个想法是在EJB中使用
Semaphore(N)
对象。@Singleton
第四个想法是以某种方式创建一个有限的无状态会话 bean 池,并将有限资源访问权放入其中。由于 bean 编号由容器管理,因此资源使用也会受到限制
(澄清一下:一般的解决方案是最好的,但众所周知,我们在 Glassfish 3.1.1 上运行,可能稍后在 JBoss 6.x 上运行)
您能否为这个问题推荐一个好的架构和/或评论我的想法以帮助我做出决定?