[
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