@Override public boolean visit(final QueueEntry entry) { if(!entry.isAvailable()) { return false; } Object groupVal = getGroupValue(entry); if(groupVal == null) { return false; } Integer group = groupVal.hashCode() & _groupMask; QueueConsumer<?,?> assignedSub = _groupMap.get(group); if(assignedSub == _sub) { _entry = entry; return true; } else { return false; } }
@Override public boolean visit(final QueueEntry entry) { if(!entry.isAvailable()) { return false; } Object groupId = getKey(entry); Group group = _groupMap.get(groupId); if(group != null && group.getConsumer() == _sub) { _entry = entry; return true; } else { return false; } }
private void resetSubPointers(final QueueEntry entry, final boolean ignoreAvailable) { Iterator<QueueConsumer<?,?>> consumerIterator = _queueConsumerManager.getAllIterator(); // iterate over all the subscribers, and if they are in advance of this queue entry then move them backwards while (consumerIterator.hasNext() && (ignoreAvailable || entry.isAvailable())) { QueueConsumer<?,?> sub = consumerIterator.next(); // we don't make browsers send the same stuff twice if (sub.seesRequeues()) { updateSubRequeueEntry(sub, entry); } } }
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; } } } }
while (node != null && (!node.isAvailable() || (expired = node.expired()) || !sub.hasInterest(node) || !mightAssign(sub,node)))
protected void doEnqueue(final ServerMessage message, final Action<? super MessageInstance> action, MessageEnqueueRecord enqueueRecord) { final QueueEntry entry = getEntries().add(message, enqueueRecord); updateExpiration(entry); try { if (entry.isAvailable()) { checkConsumersNotAheadOfDelivery(entry); notifyConsumers(entry); } checkForNotificationOnNewMessage(entry.getMessage()); } finally { if(action != null) { action.performAction(entry); } RejectPolicyHandler rejectPolicyHandler = _rejectPolicyHandler; if (rejectPolicyHandler != null) { rejectPolicyHandler.postEnqueue(entry); } _postEnqueueOverflowPolicyHandler.checkOverflow(entry); } }
if (node.isAvailable() && mightAssign(sub, node))