是否可以将JMS接收器实例的数量限制为单个实例?即只能在任何时候处理来自队列的单个消息吗?
我问的原因是因为我有一个相当密集的渲染类型进程来为每条消息运行(可能有数千个)。我想一次将此代码的执行限制为单个实例。
我的应用服务器是JBoss AS 6.0
答案 0 :(得分:2)
您可以将队列侦听器池配置为具有单个线程,因此只有一个侦听器正在处理请求,但这对我没有意义。
正确的答案是调整线程池的大小以平衡内存要求的性能。
成千上万?每秒每分钟每小时?他们到达的速度和每项任务所需的时间都至关重要。每个请求多少时间,内存,CPU?确保将队列配置为处理可能是一个相当大的积压。
更新:如果每秒有10条消息到达,并且单个侦听器处理消息需要10秒,那么您将需要101个侦听器线程才能跟上。 (10个消息/秒* 10秒表示在第一个侦听器完成其第10个任务时100个消息到达。第101个侦听器将处理第101个消息,随后的侦听器将及时完成以跟上。)如果需要1 MB每个侦听器的RAM,你需要101 MB RAM来处理一台服务器上的所有消息。您还需要对CPU进行类似的估算。
考虑多个服务器上的多个队列并在一个服务器不足的情况下在它们之间进行负载平衡可能是明智的。