[ 
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

        

Reply via email to