You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Timothy Bish (JIRA)" <ji...@apache.org> on 2011/07/12 23:04:59 UTC

[jira] [Commented] (AMQ-3320) ActiveMQ.Advisory.MessageConsumed.TempQueue and AMQ.A.MC.Queue Topics receive advisory messages when TQ or Queue are purged

    [ 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