ActiveMQ中消费者的确认

时间:2012-03-02 12:00:39

标签: java activemq

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

2 个答案:

答案 0 :(得分:3)

取决于它的配置方式,部分取决于use transactions的方式。

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

  

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

接着说:

  

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

但是,既然你真的不应该使用bean管理的交易,那么这无疑是无关紧要的。

答案 1 :(得分:1)

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