【问题标题】:How many messages can be queued up in a JMS topic?一个 JMS 主题中可以排队多少条消息?
【发布时间】:2011-08-23 08:14:35
【问题描述】:

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

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

【问题讨论】:

    标签: java hibernate jboss jms jboss-messaging


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。我们将 MS SQL Server 2008 用于 JBoss DefaultDS 数据源而不是 Hypersonic,但我假设约束是相似的。我一定会对我的实现进行压力测试,看看是否存在您所描述的任何问题。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 感谢数据库处理提示。最终用户期望数据库中的更新接近实时,因此到目前为止我们还没有研究批处理或延迟处理。我不确定我是否担心性能。我需要验证它是否满足客户的要求。
    猜你喜欢
    • 1970-01-01
    • 2016-08-07
    • 2018-04-19
    • 2021-12-23
    • 2014-09-29
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多