private boolean mightAssign(final QueueConsumer sub, final QueueEntry entry) { return _messageGroupManager == null || !sub.acquires() || _messageGroupManager.mightAssign(entry, sub); }
private boolean consumerHasAvailableMessages(final QueueConsumer consumer) { final QueueEntry queueEntry; return !consumer.acquires() || ((queueEntry = getNextAvailableEntry(consumer)) != null && noHigherPriorityWithCredit(consumer, queueEntry)); }
@Override public boolean setNotified(final QueueConsumer<?,?> consumer, final boolean notified) { QueueConsumerNode node = consumer.getQueueConsumerNode(); if (consumer.acquires()) { if (notified) { return node.moveFromTo(INTERESTED, NodeState.NOTIFIED); } else { return node.moveFromTo(NOTIFIED, NodeState.INTERESTED); } } else { return true; } }
@Override public boolean setInterest(final QueueConsumer<?,?> consumer, final boolean interested) { QueueConsumerNode node = consumer.getQueueConsumerNode(); if (interested) { if (consumer.acquires()) { return node.moveFromTo(NOT_INTERESTED, NodeState.INTERESTED); } else { return node.moveFromTo(NOT_INTERESTED, NodeState.NON_ACQUIRING); } } else { if (consumer.acquires()) { return node.moveFromTo(EITHER_INTERESTED_OR_NOTIFIED, NodeState.NOT_INTERESTED); } else { return node.moveFromTo(NON_ACQUIRING, NodeState.NOT_INTERESTED); } } }
private boolean noHigherPriorityWithCredit(final QueueConsumer<?,?> sub, final QueueEntry queueEntry) { Iterator<QueueConsumer<?,?>> consumerIterator = _queueConsumerManager.getAllIterator(); while (consumerIterator.hasNext()) { QueueConsumer<?,?> consumer = consumerIterator.next(); if(consumer.getPriority() > sub.getPriority()) { if(consumer.isNotifyWorkDesired() && consumer.acquires() && consumer.hasInterest(queueEntry) && getNextAvailableEntry(consumer) != null) { return false; } } else { break; } } return true; }
@Override public void addConsumer(final QueueConsumer<?,?> consumer) { QueueConsumerNode node = new QueueConsumerNode(this, consumer); consumer.setQueueConsumerNode(node); addToAll(node); if (consumer.isNotifyWorkDesired()) { if (consumer.acquires()) { node.moveFromTo(REMOVED, NodeState.INTERESTED); } else { node.moveFromTo(REMOVED, NodeState.NON_ACQUIRING); } } else { node.moveFromTo(REMOVED, NodeState.NOT_INTERESTED); } _count++; }
if (consumer.acquires())