[
https://issues.apache.org/jira/browse/AMQ-3320?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13032744#comment-13032744
]
Marcel Casado commented on AMQ-3320:
------------------------------------
A possible simple solution is to set setAdvisoryForConsumed(false); at the
beginning of the purge() or maybe in removeMessage(ConnectionContext c,
QueueMessageReference r) method in Queue.java
public void purge() throws Exception {
setAdvisoryForConsumed(false);
ConnectionContext c = createConnectionContext();
List<MessageReference> list = null;
do {
doPageIn(true);
pagedInMessagesLock.readLock().lock();
try {
list = new
ArrayList<MessageReference>(pagedInMessages.values());
}finally {
pagedInMessagesLock.readLock().unlock();
}
for (MessageReference ref : list) {
try {
QueueMessageReference r = (QueueMessageReference) ref;
removeMessage(c, r);
} catch (IOException e) {
}
}
// don't spin/hang if stats are out and there is nothing left in the
// store
} while (!list.isEmpty() &&
this.destinationStatistics.getMessages().getCount() > 0);
if (this.destinationStatistics.getMessages().getCount() > 0) {
LOG.warn(getActiveMQDestination().getQualifiedName()
+ " after purge complete, message count stats report: "
+ this.destinationStatistics.getMessages().getCount());
}
gc();
this.destinationStatistics.getMessages().setCount(0);
getMessages().clear();
}
> 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