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

时间:2011-05-11 13:44:33

标签: java hibernate jboss jms jboss-messaging

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

现在我不再看到Hibernate异常,但我对性能有所顾虑。在我开始发现问题之前,我可以期待主题有多大?我正在使用JBoss 4.3 EAP,我试图搜索如何配置它,但没有出现任何问题。主题大小是否会增长,直到Java内存不足或者这是否可以在JBoss中配置?

2 个答案:

答案 0 :(得分:1)

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

更一般地说,如果您生成的消息比消耗消息的速度快,那么您就会遇到问题。您需要更慢地生成它们,更快地消费它们,或者找出丢弃消息的方法。

答案 1 :(得分:0)

  

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

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

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

另一方面,您是否对表现感到担忧?现在太慢了吗?