如何管理 Managed Executor Service
How to manage Managed Executor Service
我正在使用 Managed Executor Service 来实现流程管理器,该流程管理器将在收到 JMS 消息事件后在后台处理任务。通常,会有少量任务 运行ning(最多可能 10 个),但如果发生某些事情并且我的应用程序开始接收数百个 JMS 消息事件怎么办。我该如何处理此类事件?
我的想法是尽可能限制线程数,并将所有其他消息保存到数据库,并在线程可用时 运行。提前致谢。
My thought is to limit the number of threads if possible and save all the other messages to database and will be run when thread available.
这个问题的详细答案取决于您选择 运行 在哪个 Java EE 应用程序服务器上,因为它们的配置都略有不同。
任何 Java EE 应用程序服务器都允许您配置托管执行器服务 (MES) 的线程池大小,这是线程池的工作线程数。
假设您有 10 个工作线程,并且您同时收到 100 个请求,MES 将保留一个积压的请求队列,并且工作线程会在完成工作后从队列中取出工作直到队列为空。
现在,如果工作进入队列有时没问题,但如果总体上您的工作队列增加的速度快于工作线程从队列中取出工作的速度,您将运行 成问题。解决方案是增加线程池大小,否则积压将结束 运行 并且您的服务器将 运行 内存不足。
what if something happens and my application starts getting hundred of JMS message events. How do I handle such event?
如果您的服务器上的负载非常零散以至于需要将任务保存到数据库中,那么最好的方法似乎是:
- 增加线程池大小
- 让服务器在任务积压队列已满时立即拒绝传入的任务
- 让客户端阻塞等待服务器任务队列未满(如果客户端任务提交与用户体验无关,我只会建议此选项)
我正在使用 Managed Executor Service 来实现流程管理器,该流程管理器将在收到 JMS 消息事件后在后台处理任务。通常,会有少量任务 运行ning(最多可能 10 个),但如果发生某些事情并且我的应用程序开始接收数百个 JMS 消息事件怎么办。我该如何处理此类事件?
我的想法是尽可能限制线程数,并将所有其他消息保存到数据库,并在线程可用时 运行。提前致谢。
My thought is to limit the number of threads if possible and save all the other messages to database and will be run when thread available.
这个问题的详细答案取决于您选择 运行 在哪个 Java EE 应用程序服务器上,因为它们的配置都略有不同。
任何 Java EE 应用程序服务器都允许您配置托管执行器服务 (MES) 的线程池大小,这是线程池的工作线程数。
假设您有 10 个工作线程,并且您同时收到 100 个请求,MES 将保留一个积压的请求队列,并且工作线程会在完成工作后从队列中取出工作直到队列为空。
现在,如果工作进入队列有时没问题,但如果总体上您的工作队列增加的速度快于工作线程从队列中取出工作的速度,您将运行 成问题。解决方案是增加线程池大小,否则积压将结束 运行 并且您的服务器将 运行 内存不足。
what if something happens and my application starts getting hundred of JMS message events. How do I handle such event?
如果您的服务器上的负载非常零散以至于需要将任务保存到数据库中,那么最好的方法似乎是:
- 增加线程池大小
- 让服务器在任务积压队列已满时立即拒绝传入的任务
- 让客户端阻塞等待服务器任务队列未满(如果客户端任务提交与用户体验无关,我只会建议此选项)