【问题标题】:When does a MDB acknowledges JMS queue for message readMDB 何时确认 JMS 队列以读取消息
【发布时间】:2020-11-16 18:47:54
【问题描述】:

我在 Weblogic 12c 上部署了一个 MDB,它从 JMS 队列 (UDQ) 中读取消息。 MDB 正在读取该消息,但它没有从 JMS 队列中删除,这导致消息被重复读取。 所以,我想知道 MDB 何时确认 JMS 队列它已成功读取消息并且队列应该删除该消息。

【问题讨论】:

    标签: jms ejb weblogic12c


    【解决方案1】:

    MDB 确认模式取决于非事务/事务会话类型。 Non-Transacted Session 有五种确认模式:

    • AUTO_ACKNOWLEDGE
    • CLIENT_ACKNOWLEDGE
    • DUPS_OK_ACKNOWLEDGE
    • NO_ACKNOWLEDGE
    • MULTICAST_NO_ACKNOWLEDGE

    描述:https://docs.oracle.com/cd/E13222_01/wls/docs103/jms/fund.html,表 2-7 用于非事务会话的确认模式

    当您创建事务会话时,确认模式将被忽略。当应用程序提交事务时,应用程序在事务期间收到的所有消息都会被消息传递系统确认。

    所以检查您的会话类型,然后,如果您使用非事务会话,请检查确认模式。您可以使用“AUTO_ACKNOWLEDGE” -> 确认是 onMessage() 处理程序返回后隐式发生的最后一件事。

    您可以通过

    设置AUTO_ACKNOWLEDGE

    @MessageDriven(name = "queueMdb", activationConfig = { @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), }

    【讨论】:

      猜你喜欢
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      • 1970-01-01
      相关资源
      最近更新 更多