[
https://issues.apache.org/jira/browse/ARTEMIS-1856?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16661489#comment-16661489
]
ASF GitHub Bot commented on ARTEMIS-1856:
-----------------------------------------
Github user michaelandrepearce commented on a diff in the pull request:
https://github.com/apache/activemq-artemis/pull/2388#discussion_r227604758
--- Diff:
artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java
---
@@ -1540,6 +1561,75 @@ public void run() {
}
}
+ private final class AddressQueueReaper extends
ActiveMQScheduledComponent {
+
+ AddressQueueReaper(ScheduledExecutorService scheduledExecutorService,
+ Executor executor,
+ long checkPeriod,
+ TimeUnit timeUnit,
+ boolean onDemand) {
+ super(scheduledExecutorService, executor, checkPeriod, timeUnit,
onDemand);
+ }
+
+ @Override
+ public void run() {
+ Map<SimpleString, Binding> nameMap = addressManager.getBindings();
+
+ List<Queue> queues = new ArrayList<>();
+
+ for (Binding binding : nameMap.values()) {
+ if (binding.getType() == BindingType.LOCAL_QUEUE) {
+ Queue queue = (Queue) binding.getBindable();
+
+ queues.add(queue);
+ }
+ }
+
+ for (Queue queue : queues) {
+ int consumerCount = queue.getConsumerCount();
+ long messageCount = queue.getMessageCount();
+ boolean autoCreated = queue.isAutoCreated();
+ long consumerRemovedTimestamp =
queue.getConsumerRemovedTimestamp();
+
+ if (!queue.isInternalQueue() && autoCreated && messageCount ==
0 && consumerCount == 0 && consumerRemovedTimestamp != -1) {
+ SimpleString queueName = queue.getName();
+ AddressSettings settings =
addressSettingsRepository.getMatch(queue.getAddress().toString());
+ if (settings.isAutoDeleteQueues() &&
(System.currentTimeMillis() - consumerRemovedTimestamp >=
settings.getAutoDeleteQueuesDelay())) {
+ if (ActiveMQServerLogger.LOGGER.isDebugEnabled()) {
+ ActiveMQServerLogger.LOGGER.info("deleting
auto-created queue \"" + queueName + ".\" consumerCount = " + consumerCount +
"; messageCount = " + messageCount + "; isAutoDeleteQueues = " +
settings.isAutoDeleteQueues());
+ }
+
+ try {
+ server.destroyQueue(queueName, null, true, false);
--- End diff --
The chance of this existed (and still does) in the existing
QueueManagerImpl logic where no delay is taken into account.
> Add support for delays before deleting addresses and queues
> -----------------------------------------------------------
>
> Key: ARTEMIS-1856
> URL: https://issues.apache.org/jira/browse/ARTEMIS-1856
> Project: ActiveMQ Artemis
> Issue Type: New Feature
> Reporter: Lionel Cons
> Priority: Major
>
> By default, Artemis deletes inactive addresses and empty queues. This is good
> to minimize the resources used.
> However, this is problematic for monitoring because counters (like the
> numbers of received and sent messages) are attached to these objects that get
> deleted. So a monitoring tool periodically probing the broker may miss these
> objects that get immediately deleted.
> It would be good to add support for delays. An object would not be
> immediately deleted but would stay in the broker for a configurable period of
> time, so that monitoring tools get a chance to get its counters.
> Note that this feature (delayed deletion) already exists in ActiveMQ 5. See
> the {{gcInactiveDestinations}}, {{schedulePeriodForDestinationPurge}} and
> {{inactiveTimoutBeforeGC}} parameters in
> http://activemq.apache.org/delete-inactive-destinations.html.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)