1

我们在使用 WebLogic 8.1 时遇到了一个问题,但无法解决。我们经常将一百条或更多条 JMS 消息排队,每条消息都代表一个工作单元。尽管每条消息的大小和外观都相同,但一条消息可能只需要几秒钟即可完成,而下一条则代表 20 分钟的可靠处理。

我们的问题是,我们处理这些消息的每个消息驱动 bean 最终都在一个线程上,该线程似乎一次抓取 10 条消息(我们认为它是作为 WebLogic 优化来完成的,以避免遇到一遍又一遍地排队等待小消息)。然后,当一个线程一个接一个地完成它所有的小工作并且没有新的工作进入时,我们最终会得到一个单线程日志卡在一个长时间运行的工作上,还有多达九个其他项目等待完成,尽管其他线程是空闲的并且可以在这些工作单元上启动的事实。

现在我们正处于转换到 WebLogic 10 的阶段,因此很自然地回到这个问题并找出我们可以实施的任何解决方案,以便:a) 每个线程只在一个时间来处理并让所有其他人在传入队列中等待,或者 b) 它会自动将等待消息(即使是已经分配给特定线程的消息)重新分配给空闲线程。有任何想法吗?

4

2 回答 2

1

启用转发延迟并提供适当的值。如果消息在配置的时间内没有得到处理,这将导致 JMS 队列将消息重新分发给它的对等方。

每次从队列中取出一条消息可能是矫枉过正 - 这完全是您正在处理的消息数量和您衡量的问题的平衡。

WebLogic 10 上的 JMS 也存在多个问题,具体取决于您的设置。从一开始就使用最新的 MP,您可以节省大量时间和麻烦。

于 2011-02-10T19:04:31.123 回答
0

当线程在获得可以执行的资源后处于“饥饿”状态时。处于饥饿状态的线程称为“贪婪线程”

于 2011-08-05T02:04:41.627 回答