void notifyOtherConsumers(final QueueConsumer<?,?> excludedConsumer) { final Iterator<QueueConsumer<?,?>> interestedIterator = _queueConsumerManager.getInterestedIterator(); while (hasAvailableMessages() && interestedIterator.hasNext()) { QueueConsumer<?,?> consumer = interestedIterator.next(); if (excludedConsumer != consumer) { if (notifyConsumer(consumer)) { break; } } } }
void setNotifyWorkDesired(final QueueConsumer consumer, final boolean desired) { if (_queueConsumerManager.setInterest(consumer, desired)) { if (desired) { _activeSubscriberCount.incrementAndGet(); notifyConsumer(consumer); } else { _activeSubscriberCount.decrementAndGet(); // iterate over interested and notify one as long as its priority is higher than any notified final Iterator<QueueConsumer<?,?>> consumerIterator = _queueConsumerManager.getInterestedIterator(); final int highestNotifiedPriority = _queueConsumerManager.getHighestNotifiedPriority(); while (consumerIterator.hasNext()) { QueueConsumer<?,?> queueConsumer = consumerIterator.next(); if (queueConsumer.getPriority() < highestNotifiedPriority || notifyConsumer(queueConsumer)) { break; } } } } }
void notifyConsumers(QueueEntry entry) { Iterator<QueueConsumer<?,?>> nonAcquiringIterator = _queueConsumerManager.getNonAcquiringIterator(); while (nonAcquiringIterator.hasNext()) { QueueConsumer<?,?> consumer = nonAcquiringIterator.next(); if(consumer.hasInterest(entry)) { notifyConsumer(consumer); } } final Iterator<QueueConsumer<?,?>> interestedIterator = _queueConsumerManager.getInterestedIterator(); while (entry.isAvailable() && interestedIterator.hasNext()) { QueueConsumer<?,?> consumer = interestedIterator.next(); if(consumer.hasInterest(entry)) { if(notifyConsumer(consumer)) { break; } else if(!noHigherPriorityWithCredit(consumer, entry)) { // there exists a higher priority consumer that would take this message, therefore no point in // continuing to loop break; } } } }