2010-03-24 61 views
2

是否可以将JMS接收器实例的数量限制为单个实例?即只能在任何时候从队列中处理单个消息?限制JMS目标实例

我问的原因是因为我有一个相当密集的渲染类型进程来运行每个消息(可能数千)。我希望一次将此代码的执行限制为单个实例。

我的应用服务器JBoss应用服务器6.0

回答

2

您可以配置队列监听池有一个线程,所以不超过一个监听器是处理请求,但是这是没有意义的我。

正确的答案是调整线程池的大小以平衡性能和内存要求。

数千?每秒钟,每分钟,每小时?他们到达的速度以及每项任务的时间都是至关重要的。每个请求需要多少时间,内存,CPU?确保你配置你的队列来处理可能是一个相当大的积压。

更新:如果每秒有十条消息到达,并且单个侦听器处理一条消息需要10秒钟,那么您需要101个侦听器线程才能跟上。 (10条消息/秒* 10秒意味着当第一个监听者完成10秒任务时,有100条消息到达,第101个监听者将处理第101条消息,随后的监听者将及时完成。)如果您需要1 MB每个听众的RAM,你只需要101 MB RAM来处理一台服务器上的所有消息。你也需要一个类似的CPU估算。

如果一台服务器不够用,考虑多个服务器上的多个队列以及它们之间的负载平衡可能是明智的。

+0

谢谢 - 只是给出一个粗略的想法,我们正在谈论每秒几十个请求,每个消息的处理时间可能在10到30秒之间。尽管我希望尽可能优化处理速度,但如果为每个请求创建新实例,我最担心的是服务器资源将会耗尽,正如我现有的使用无状态会话Bean调用的实现所发生的情况一样。 – jumponadoughnut 2010-03-24 18:51:33