【问题标题】:MDB new threads are calling onMessage while previous thread not finishedMDB 新线程正在调用 onMessage 而前一个线程未完成
【发布时间】:2017-07-01 22:27:37
【问题描述】:

在 JBOSS EAP6 中,我有一个长时间运行的 MDB 线程来监听 JMS 队列。它收到一条文本消息,其中包含它应该处理的工作数据库密钥(循环)。

在执行过程中,我注意到新线程会产生新的 MDB 实例,从而导致不一致。我确实想在不改变性能的情况下以编程方式或配置方式防止这种情况发生。因此,例如在 onMessage 中检查工作正在进行中。我无法更改数据库模型。

由于我在单个 VM 中运行,因此我正处于使用存储 DB 密钥的静态 Set 的边缘(最后的手段)。 (我有点时间压力来解决这个问题)。

【问题讨论】:

  • 一个想法可能是使用单例 bean,我可以在其中获取消息中 DB Key 的锁..

标签: java jboss jms


【解决方案1】:

问题是由于我忘记指定事务超时造成的。因此,默认超时似乎开始了。

通过添加事务超时解决了问题:

 @ActivationConfigProperty( propertyName = "transactionTimeout", propertyValue = "10800" )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 2013-09-13
    • 1970-01-01
    相关资源
    最近更新 更多