我们在使用 WebLogic 8.1 时遇到了一个问题,但无法解决。我们经常将一百条或更多条 JMS 消息排队,每条消息都代表一个工作单元。尽管每条消息的大小和外观都相同,但一条消息可能只需要几秒钟即可完成,而下一条则代表 20 分钟的可靠处理。
我们的问题是,我们处理这些消息的每个消息驱动 bean 最终都在一个线程上,该线程似乎一次抓取 10 条消息(我们认为它是作为 WebLogic 优化来完成的,以避免遇到一遍又一遍地排队等待小消息)。然后,当一个线程一个接一个地完成它所有的小工作并且没有新的工作进入时,我们最终会得到一个单线程日志卡在一个长时间运行的工作上,还有多达九个其他项目等待完成,尽管其他线程是空闲的并且可以在这些工作单元上启动的事实。
现在我们正处于转换到 WebLogic 10 的阶段,因此很自然地回到这个问题并找出我们可以实施的任何解决方案,以便:a) 每个线程只在一个时间来处理并让所有其他人在传入队列中等待,或者 b) 它会自动将等待消息(即使是已经分配给特定线程的消息)重新分配给空闲线程。有任何想法吗?