问题:
Java“消息驱动 Bean”实例不止一次同时处理一条消息(放入 JMS 队列中)。
如何确保“消息驱动 Bean”仅处理一条消息一次。
我在 Weblogic 12c 中部署了一个 Java 消息驱动 Bean,如下所示。
MDB
@MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "connectionFactoryJndiName", propertyValue = "jms/notConnectionFactory"),
@ActivationConfigProperty(propertyName = "destinationJndiName", propertyValue = "jms/notScannerQueue")
})
public class AttachmentMDB implements MessageListener {
最佳答案
如果我们停留在消息驱动领域,这取决于确认模式:AUTO_ACKNOWLEDGE
或 DUPS_OK_ACKNOWLEDGE
。
如果您使用DUPS_OK_ACKNOWLEDGE
,则确认会在稍后阶段发送到客户端。在这种情况下,消息可能会被处理两次。
使用AUTO_ACKNOWLEDGE
,为了简化客户端(消息生产者)被搁置,直到代理(消息消费者)确认它已收到消息。这样做的明显效果是消息只被处理一次。
关于java - 一条 JMS 消息由消息驱动 Bean 处理两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42783985/