3

对于我的 Web 应用程序,我有一个 JMS 主题,它在任何给定时间都会接收到许多消息。我有一个 MDB 处理消息并根据消息数据更新数据库。当主题同时接收多条消息时,我一直在org.hibernate.exception.LockAcquisitionException收到消息,因此我将 MDB 的 maxSessions 属性更改为 1 并使其成为单例。

现在我不再看到 Hibernate 异常,但我担心性能。在我开始看到问题之前,我可以期望主题有多大?我正在使用 JBoss 4.3 EAP,我尝试搜索如何配置它,但没有任何结果。主题大小会增长直到 Java 内存不足,还是可以在 JBoss 中配置?

4

2 回答 2

1

默认情况下,JBoss Messaging 会将其消息存储在嵌入式 Hypersonic 数据库中。如果您的主题开始填满,您的内存消耗不应线性增加,但数据库迟早会填满(据我记得,Hypersonic 有 40,000 行限制,至少在此配置中)。

更一般地说,如果你产生消息的速度比消费消息的速度快,那么你就有问题了。你要么需要更慢地生产它们,更快地消费它们,要么想出一种丢弃消息的方法。

于 2011-05-11T14:04:05.123 回答
0

一个 JMS 主题中可以排队多少条消息?

取决于可用内存或磁盘空间,取决于 JMS 供应商和队列配置。

但是纯粹考虑更新数据库的性能,您应该进行批处理。(即使只有一个线程)。一次获取 X 消息,将它们全部处理,然后使用同一事务将批量更新发送到数据库。您的数据库可能会在与 1 行几乎相同的时间内更新/更新 100 或 1000 行。

顺便说一句,您是否完全关心性能?现在是不是太慢了?

于 2011-05-11T14:05:03.823 回答