@Override public Map<String, List<MessageReference>> getDeliveringMessages() { final Iterator<ConsumerHolder<? extends Consumer>> consumerHolderIterator; synchronized (this) { consumerHolderIterator = redistributor == null ? consumers.iterator() : SingletonIterator.newInstance(redistributor); } Map<String, List<MessageReference>> mapReturn = new HashMap<>(); while (consumerHolderIterator.hasNext()) { ConsumerHolder holder = consumerHolderIterator.next(); List<MessageReference> msgs = holder.consumer.getDeliveringMessages(); if (msgs != null && msgs.size() > 0) { mapReturn.put(holder.consumer.toManagementString(), msgs); } } return mapReturn; }
private void handleMessageGroup(MessageReference ref, Consumer consumer, Consumer groupConsumer, SimpleString groupID) { if (exclusive) { if (groupConsumer == null) { exclusiveConsumer = consumer; } consumers.repeat(); } else if (groupID != null) { if (extractGroupSequence(ref) == -1) { groups.remove(groupID); consumers.repeat(); } else if (groupConsumer == null) { groups.put(groupID, consumer); } else { consumers.repeat(); } } }
@Override public int getConsumerCount() { return consumers.size(); }
@Test public void removeTest() { TestPriority testPriority = new TestPriority("hello", 0); assertFalse(queueConsumers.hasNext()); queueConsumers.add(testPriority); queueConsumers.reset(); assertTrue(queueConsumers.hasNext()); queueConsumers.remove(testPriority); queueConsumers.reset(); assertFalse(queueConsumers.hasNext()); assertEquals(0, queueConsumers.getPriorites().size()); queueConsumers.remove(testPriority); queueConsumers.remove(testPriority); }
consumers.reset(); while (true) { if (handled == MAX_DELIVERIES_IN_LOOP) { if (consumers.hasNext()) { holder = consumers.next(); } else { break; consumers.reset(); continue; handledconsumer = consumer; handled++; consumers.reset(); } else if (status == HandleStatus.BUSY) { try { } else if (status == HandleStatus.NO_MATCH) { consumers.reset(); } else if (!consumers.hasNext()) { if (noDelivery == this.consumers.size()) { if (handledconsumer != null) {
try { synchronized (this) { if (maxConsumers != MAX_CONSUMERS_UNLIMITED && consumers.size() >= maxConsumers) { throw ActiveMQMessageBundle.BUNDLE.maxConsumerLimitReachedForQueue(address, name); if (consumers.add(newConsumerHolder)) { int currentConsumerCount = consumers.size(); if (delayBeforeDispatch >= 0) { dispatchStartTimeUpdater.compareAndSet(this,-1, delayBeforeDispatch + System.currentTimeMillis());
private void internalAddRedistributor(final ArtemisExecutor executor) { // create the redistributor only once if there are no local consumers if (consumers.isEmpty() && redistributor == null) { if (logger.isTraceEnabled()) { logger.trace("QueueImpl::Adding redistributor on queue " + this.toString()); } redistributor = (new ConsumerHolder(new Redistributor(this, storageManager, postOffice, executor, QueueImpl.REDISTRIBUTOR_BATCH_SIZE))); redistributor.consumer.start(); deliverAsync(); } }
@Test public void roundRobinTest() { queueConsumers.add(new TestPriority("A", 127)); queueConsumers.add(new TestPriority("B", 127)); queueConsumers.add(new TestPriority("E", 0)); queueConsumers.add(new TestPriority("D", 20)); queueConsumers.add(new TestPriority("C", 127)); queueConsumers.reset(); assertTrue(queueConsumers.hasNext()); assertEquals("A", queueConsumers.next().getName()); queueConsumers.reset(); assertTrue(queueConsumers.hasNext()); assertEquals("B", queueConsumers.next().getName()); assertTrue(queueConsumers.hasNext()); assertEquals("C", queueConsumers.next().getName()); assertTrue(queueConsumers.hasNext()); assertEquals("A", queueConsumers.next().getName()); assertTrue(queueConsumers.hasNext()); assertEquals("D", queueConsumers.next().getName()); assertTrue(queueConsumers.hasNext()); assertEquals("E", queueConsumers.next().getName()); assertFalse(queueConsumers.hasNext());
@Override public synchronized void addRedistributor(final long delay) { clearRedistributorFuture(); if (redistributor != null) { // Just prompt delivery deliverAsync(); } if (delay > 0) { if (consumers.isEmpty()) { DelayedAddRedistributor dar = new DelayedAddRedistributor(executor); redistributorFuture = scheduledExecutor.schedule(dar, delay, TimeUnit.MILLISECONDS); } } else { internalAddRedistributor(executor); } }
@Override public Set<Consumer> getConsumers() { Set<Consumer> consumersSet = new HashSet<>(this.consumers.size()); for (ConsumerHolder<? extends Consumer> consumerHolder : consumers) { consumersSet.add(consumerHolder.consumer); } return consumersSet; }
if (consumers.size() == 0) { logger.debug("There are no consumers, no need to check slow consumer's rate"); return; } 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.");