【发布时间】:2020-11-16 18:47:54
【问题描述】:
我在 Weblogic 12c 上部署了一个 MDB,它从 JMS 队列 (UDQ) 中读取消息。 MDB 正在读取该消息,但它没有从 JMS 队列中删除,这导致消息被重复读取。 所以,我想知道 MDB 何时确认 JMS 队列它已成功读取消息并且队列应该删除该消息。
【问题讨论】:
标签: jms ejb weblogic12c
我在 Weblogic 12c 上部署了一个 MDB,它从 JMS 队列 (UDQ) 中读取消息。 MDB 正在读取该消息,但它没有从 JMS 队列中删除,这导致消息被重复读取。 所以,我想知道 MDB 何时确认 JMS 队列它已成功读取消息并且队列应该删除该消息。
【问题讨论】:
标签: jms ejb weblogic12c
MDB 确认模式取决于非事务/事务会话类型。 Non-Transacted Session 有五种确认模式:
描述: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"), }
【讨论】: