Lea*_*ner 0 java jboss activemq-classic jms
我无法理解JMS AutoAck网站上的以下几点:AUTO_ACKNOWLEDGE
在调用消费者的MessageListener之后onMessage方法成功返回之后(根据我的理解,它可能仍在进行中)
但据我所知,消费者实现MessageListener并执行了onMessage()方法中的所有处理(由消费者实现)
还有一个问题:我无法理解之间的差异AUTO_ACKNOWLEDGE和DUPS_OK_ACKNOWLEDGE。
我读的是:DUPS_OK_ACKNOWLEDGE懒洋洋地承认,并可能再次传递相同的消息,但无法理解其实际含义。
请在AUTO_ACKNOWLEDGE需要的地方和DUPS_OK_ACKNOWLEDGE需要的地方提供一个实际的例子来帮助我
2013年9月5日添加:从Java 重新交付和交易中添加一个点
考虑在消息处理期间发生的故障。消息发生了什么?邮件会丢失还是重新传递以便以后成功处理?这些问题的答案取决于您选择的 交易选项。
JMS中事务和重新交付中的一些报价
自动模式:当会话使用自动模式时,从该会话发送或接收的消息将被自动确认。这是最简单的模式,它通过启用仅一次消息传递保证来表达JMS的功能。
阅读消息也意味着确认。这AUTO_ACKNOWLEDGE很简单。但是,如果您使用的是QueueReceiver不带setMessageListener,并且消息处理失败,则消息会丢失。
重复正常模式:当会话使用重复正常模式时,从会话发送或接收的消息会像自动模式一样被自动确认,尽管是懒惰的。在极少数情况下,消息可能会多次传递。此模式启用最少一次的消息传递保证。
与一样AUTO_ACKNOWLEDGE,开销较小,但是应用程序必须能够处理重复的消息。如果性能很重要,则可以使用此功能,并且重复消息不是问题。
客户端模式:当会话使用客户端模式时,不会自动确认从该会话发送或接收的消息。应用程序必须确认消息回执。这种模式使应用程序(而不是JMS提供程序)可以完全控制消息确认,但以增加代码复杂性为代价。
如果处理一条消息,则使用此方法,并且在完成此任务之后,您将显式调用message.acknowledge()。如果在处理过程中发生异常,则消息不会丢失(它将重新传递)。
至于问题的第一部分,请看一下AUTO_ACKNOWLEDGE的Javadoc 。引用:
使用此确认模式,会话将自动确认客户端收到消息
当会话已成功从呼叫返回以接收时
或在会话已调用以处理消息的消息侦听器成功返回时。
链接的文章符合此描述(仅确认,如果onMessage成功)。
我已经使用JBoss 7进行了测试,并AUTO_ACKNOWLEDGE使用了MessageListener:如果出现异常onMessage,则实际上不会重新传递消息。
| 归档时间: |
|
| 查看次数: |
4372 次 |
| 最近记录: |