2012-03-02 109 views
1

我正在使用ActiveMQ编写Java应用程序。我有一个生产者类(它接受用户输入)和一个消费者类与一个监听器,所以只要消息到达,消息监听器就会执行onMessage(msg)函数。 但是,我的问题是,消费者何时将确认发回给代理,以便消息从代理退出?是在完成onMessage(msg)函数中写入的操作之后,还是仅在调用onMessage(msg)函数时?来自ActiveMQ中消费者的致谢

回答

1

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

+0

是的..我刚刚检查后,要求在onMessage()函数中等待并且未发送确认。谢谢:-) – Vanp 2012-03-05 05:48:53

3

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

您使用的是消息驱动bean吗?在这种情况下,我相信当交易成功执行时会发送确认。参见specification(特别是“ejbcore”版本),部分5.4.14消息确认为JMS消息驱动Bean,它说:

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

它接着说:

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

但是既然你真的不应该使用bean管理的事务,那么希望这是不相关的。