[ https://issues.apache.org/jira/browse/AMQ-3320?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13064135#comment-13064135 ]
Timothy Bish commented on AMQ-3320: ----------------------------------- I'd suggest something like this instead of the disable / enable method shown above. {code} ### Eclipse Workspace Patch 1.0 #P activemq-core Index: src/main/java/org/apache/activemq/broker/region/BaseDestination.java =================================================================== --- src/main/java/org/apache/activemq/broker/region/BaseDestination.java (revision 1145597) +++ src/main/java/org/apache/activemq/broker/region/BaseDestination.java (working copy) @@ -452,7 +452,9 @@ * @param messageReference */ public void messageConsumed(ConnectionContext context, MessageReference messageReference) { - if (advisoryForConsumed) { + // If there are no consumers then the message was consumed by a purge which we don't + // want to propagate as a consumer ack of the message. + if (advisoryForConsumed && destinationStatistics.getConsumers().getCount() > 0) { broker.messageConsumed(context, messageReference); } } {code} > ActiveMQ.Advisory.MessageConsumed.TempQueue and AMQ.A.MC.Queue Topics receive > advisory messages when TQ or Queue are purged > --------------------------------------------------------------------------------------------------------------------------- > > Key: AMQ-3320 > URL: https://issues.apache.org/jira/browse/AMQ-3320 > Project: ActiveMQ > Issue Type: Bug > Affects Versions: 5.4.2, 5.5.0 > Reporter: Marcel Casado > Priority: Minor > Attachments: AdvisoryTempDestinationTests.java > > > I have enabled <policyEntry tempQueue="true" advisoryForConsumed="true" /> in > the broker so I can subscribe to > "ActiveMQ.Advisory.MessageConsumed.TempQueue.>" to get notified of messages > consumed on a tempQueue/s. When client shuts down > if remaining messages are in the tempQueue an advisory message is generated > and send to the ActiveMQ.Advisory.MessageConsumed.TempQueue topic for each > message for that tempQueue. The same will happen if purge() is called on a > TempQueue or Queue for example through JMX. > In my application I need to know if a message is consumed by a client but I > can not differentiate between a client "ack" massage and one "ack" by the > broker when the tempQueue is "disposed" looking to the message sent to the > ActiveMQ.Advisory.MessageConsumed.TempQueue... . > > Looking at the code for TempQueue and Queue this is the sequence : > TempQueue.dispose(context) --> purge() --> removeMessage() -> acknowledge() > --> messageConsumed() > This is kind of a conceptual issue since myself consider that removing a > message due a purge or a tempQueue cleanup should not trigger a > messageConsumed advisory. > Original ActiveMQ users post : > http://activemq.2283324.n4.nabble.com/ActiveMQ-Advisory-MessageConsumed-TempQueue-problem-td3510067.html -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira