java - 一条 JMS 消息由消息驱动 Bean 处理两次

标签 java ejb jms weblogic12c

问题:

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_ACKNOWLEDGEDUPS_OK_ACKNOWLEDGE

如果您使用DUPS_OK_ACKNOWLEDGE,则确认会在稍后阶段发送到客户端。在这种情况下,消息可能会被处理两次。

使用AUTO_ACKNOWLEDGE,为了简化客户端(消息生产者)被搁置,直到代理(消息消费者)确认它已收到消息。这样做的明显效果是消息只被处理一次。

关于java - 一条 JMS 消息由消息驱动 Bean 处理两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42783985/

相关文章:

java - 使用 ByteBuddy 在同一个类中检测多个方法

jakarta-ee - 使用EJB计时器服务

java - 消息驱动的 bean 和超时中的长时间运行任务

Java JMS - 消息监听器和 onException

java - 努力将数组值传递到方法中

java - 在不使用额外数据结构的情况下从 BST 检索值的排序数组

java - weblogic上下文查找错误: java. rmi.UnmarshalException:解码参数时出错

java - ActiveMQ ObjectMessage 安全性不适用于带有 SERIALIZABLE_PACKAGES 变量的 Linux

java - Spring 3.0 lazy-init 不支持 DefaultMessageListenerContainer?

java - 联网电视所需的技术