首页 文章

ActiveMQ中消费者的确认

提问于
浏览
1

我正在使用ActiveMQ编写Java应用程序 . 我有一个Producer类(它接受用户输入)和一个带有监听器的Consumer类,因此一旦消息到达,Message Listener就会执行onMessage(msg)函数 . 不过,我的问题是,消费者何时将确认信息发回给经纪人,以便msg从经纪人那里退出?是在完成onMessage(msg)函数中写入的操作之后还是仅在调用onMessage(msg)函数时?

2 回答

  • 3

    在正常情况下,ack在onMessage完成后发送,因为它需要处理onMessage抛出异常的情况 .

  • 1

    取决于它的配置方式,部分取决于你如何配置use transactions .

    您使用的是消息驱动的bean吗?在这种情况下,我相信在成功提交交易时将发送确认 . 请参阅specification(特别是'ejbcore'版本),第5.4.14节“JMS消息驱动Bean的消息确认”,其中说:

    邮件确认由容器自动处理 . 如果消息驱动的bean使用容器管理的事务划分,则消息确认将作为事务提交的一部分自动处理 .

    它继续说:

    如果使用bean管理的事务划分,则消息接收不能是bean管理的事务的一部分,并且在这种情况下,容器确认收据 . 如果使用bean管理的事务划分,则Bean Provider可以通过使用MessageDriven批注的activationConfig元素或使用activation-config-property部署描述符元素来指示是应该应用JMS AUTO_ACKNOWLEDGE语义还是DUPS_OK_ACKNOWLEDGE语义 .

    但是,由于你真的不应该使用bean管理的事务,这有望无关紧要 .

相关问题