private void scheduleDepage(final boolean scheduleExpiry) { if (!depagePending) { if (logger.isTraceEnabled()) { logger.trace("Scheduling depage for queue " + this.getName()); } depagePending = true; pageSubscription.getExecutor().execute(new DepageRunner(scheduleExpiry)); } }
@Override public void expire(final MessageReference ref, final ServerConsumer consumer) throws Exception { SimpleString messageExpiryAddress = expiryAddressFromMessageAddress(ref); if (messageExpiryAddress == null) { messageExpiryAddress = expiryAddressFromAddressSettings(ref); } if (messageExpiryAddress != null) { if (logger.isTraceEnabled()) { logger.trace("moving expired reference " + ref + " to address = " + messageExpiryAddress + " from queue=" + this.getName()); } move(null, messageExpiryAddress, null, ref, false, AckReason.EXPIRED, consumer); } else { if (logger.isTraceEnabled()) { logger.trace("expiry is null, just acking expired message for reference " + ref + " from queue=" + this.getName()); } acknowledge(ref, AckReason.EXPIRED, consumer); } if (server != null && server.hasBrokerMessagePlugins()) { final SimpleString expiryAddress = messageExpiryAddress; server.callBrokerMessagePlugins(plugin -> plugin.messageExpired(ref, expiryAddress, consumer)); } }
@Override public void unproposed(final SimpleString groupID) { if (groupID.toString().endsWith("." + this.getName())) { // this means this unproposed belongs to this routing, so we will // remove this group // This is removing the name and a . added, giving us the original groupID used // this is because a groupID is stored per queue, and only this queue is expiring at this point final SimpleString groupIDToRemove = (SimpleString) groupID.subSequence(0, groupID.length() - getName().length() - 1); // using an executor so we don't want to hold anyone just because of this getExecutor().execute(new Runnable() { @Override public void run() { synchronized (QueueImpl.this) { if (groups.remove(groupIDToRemove) != null) { logger.debug("Removing group after unproposal " + groupID + " from queue " + QueueImpl.this); } else { logger.debug("Couldn't remove Removing group " + groupIDToRemove + " after unproposal on queue " + QueueImpl.this); } } } }); } }
logger.trace("QueueMemorySize before depage on queue=" + this.getName() + " is " + queueMemorySize.get()); PagedReference reference = pageIterator.next(); if (logger.isTraceEnabled()) { logger.trace("Depaging reference " + reference + " on queue " + this.getName()); logger.debug("Queue Memory Size after depage on queue=" + this.getName() + " is " + queueMemorySize.get() + " with maxSize = " + maxSize + ". Depaged " + depaged + " messages, pendingDelivery=" + messageReferences.size() + ", intermediateMessageReferences= " + intermediateMessageReferences.size() + ", queueDelivering=" + deliveringMetrics.getMessageCount());
private void configureSlowConsumerReaper(final AddressSettings settings) { if (settings == null || settings.getSlowConsumerThreshold() == AddressSettings.DEFAULT_SLOW_CONSUMER_THRESHOLD) { if (slowConsumerReaperFuture != null) { slowConsumerReaperFuture.cancel(false); slowConsumerReaperFuture = null; slowConsumerReaperRunnable = null; if (logger.isDebugEnabled()) { logger.debug("Cancelled slow-consumer-reaper thread for queue \"" + getName() + "\""); } } } else { if (slowConsumerReaperRunnable == null) { scheduleSlowConsumerReaper(settings); } else if (slowConsumerReaperRunnable.checkPeriod != settings.getSlowConsumerCheckPeriod() || slowConsumerReaperRunnable.threshold != settings.getSlowConsumerThreshold() || !slowConsumerReaperRunnable.policy.equals(settings.getSlowConsumerPolicy())) { if (slowConsumerReaperFuture != null) { slowConsumerReaperFuture.cancel(false); slowConsumerReaperFuture = null; } scheduleSlowConsumerReaper(settings); } } }
void scheduleSlowConsumerReaper(AddressSettings settings) { slowConsumerReaperRunnable = new SlowConsumerReaperRunnable(settings.getSlowConsumerCheckPeriod(), settings.getSlowConsumerThreshold(), settings.getSlowConsumerPolicy()); slowConsumerReaperFuture = scheduledExecutor.scheduleWithFixedDelay(slowConsumerReaperRunnable, settings.getSlowConsumerCheckPeriod(), settings.getSlowConsumerCheckPeriod(), TimeUnit.SECONDS); if (logger.isDebugEnabled()) { logger.debug("Scheduled slow-consumer-reaper thread for queue \"" + getName() + "\"; slow-consumer-check-period=" + settings.getSlowConsumerCheckPeriod() + ", slow-consumer-threshold=" + settings.getSlowConsumerThreshold() + ", slow-consumer-policy=" + settings.getSlowConsumerPolicy()); } }
/** * This will wait for any pending deliveries to finish */ private boolean flushDeliveriesInTransit() { try { if (deliveriesInTransit.await(DELIVERY_TIMEOUT)) { return true; } else { ActiveMQServerLogger.LOGGER.timeoutFlushInTransit(getName().toString(), getAddress().toString()); return false; } } catch (Exception e) { ActiveMQServerLogger.LOGGER.unableToFlushDeliveries(e); return false; } }
logger.trace("Queue " + this.getName() + " is an internal queue, no checkRedelivery"); logger.trace("Sending reference " + reference + " to DLA = " + addressSettings.getDeadLetterAddress() + " since ref.getDeliveryCount=" + reference.getDeliveryCount() + "and maxDeliveries=" + maxDeliveries + " from queue=" + this.getName());
@Test public void testName() { final SimpleString name = new SimpleString("oobblle"); QueueImpl queue = getNamedQueue(name); Assert.assertEquals(name, queue.getName()); }
logger.tracef("Queue " + getName() + " is out of direct delivery as no consumers handled a delivery");
float queueRate = getRate(); if (logger.isDebugEnabled()) { logger.debug(getAddress() + ":" + getName() + " has " + getConsumerCount() + " consumer(s) and is receiving messages at a rate of " + queueRate + " msgs/second."); } else if (queueRate < (threshold * consumers.size())) { if (logger.isDebugEnabled()) { logger.debug("Insufficient messages received on queue \"" + getName() + "\" to satisfy slow-consumer-threshold. Skipping inspection of consumer."); if (queueRate < threshold) { if (logger.isDebugEnabled()) { logger.debug("Insufficient messages received on queue \"" + getName() + "\" to satisfy slow-consumer-threshold. Skipping inspection of consumer."); ActiveMQServerLogger.LOGGER.slowConsumerDetected(serverConsumer.getSessionID(), serverConsumer.getID(), getName().toString(), connection.getRemoteAddress(), threshold, consumerRate); if (policy.equals(SlowConsumerPolicy.KILL)) { connection.killMessage(server.getNodeID());
logger.trace("Queue " + this.getName() + " is delivering reference " + ref);