【问题标题】:Isolation Level in JMSJMS 中的隔离级别
【发布时间】:2012-11-21 09:15:20
【问题描述】:

JMS 队列中是否有可用的事务隔离级别,例如 JDBC

更具体地说,在过渡模式下,当客户端消费一条消息但尚未提交时,下一个客户端是否会消费下一条消息?如果第一个客户端回滚转换,即消息放置在队列中的位置,我认为它将被放置在之前的位置。

【问题讨论】:

    标签: java jakarta-ee transactions jms


    【解决方案1】:

    简短回答:

    JMS 发送要么是事务性的,要么不是事务性的,这意味着消息在发送者事务提交时或立即“提交”(对于代理和 MDB 可见)或立即(即使客户端稍后发送事务回滚)。

    JMS 接收也有简单的开/关事务:当消息被 MDB 拾取(非事务性)或 MDB 无异常返回(事务性)时,消息被标记为已接收。

    【讨论】:

    • 您的意思是,在第一个消费者回滚之前,任何其他消费者都无法使用标记为已收到的消息?
    • @labbhattacharjee:当事务消费者收到消息时,如果消费者回滚,该消息可以回到队列中,以便其他消费者可以重试。当非事务消费者收到消息时,它会从队列中完全移除,如果消费者回滚或抛出错误,则消息丢失(不会再次处理)
    【解决方案2】:

    事务隔离是关于数据库表更改的可见性。 JMS 消息是不可变的,您发送一次就无法更改。

    【讨论】:

    • 仍处于过渡模式,消费者需要明确提交/回滚,对吧?一个客户的未承诺消费对另一个客户是可见的吗?
    • 好的。我们可以说 JMS 中只有一个级别 - 已提交读。那怎么样?
    猜你喜欢
    • 1970-01-01
    • 2015-08-02
    • 2013-01-25
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多