@Override public void notifyWork(final X target) { if(_consumersWithPendingWork.add((AbstractConsumerTarget) target)) { getAMQPConnection().notifyWork(this); } }
@Override public void run() { getAMQPConnection().notifyWork(AbstractAMQPSession.this); } });
@Override public ListenableFuture<Void> doOnIOThreadAsync(final Runnable task) { final ListenableFuture<Void> future = getAMQPConnection().doOnIOThreadAsync(task); return doAfter(MoreExecutors.directExecutor(), future, new Runnable() { @Override public void run() { getAMQPConnection().notifyWork(AbstractAMQPSession.this); } }); } }
@Override public boolean processPending() { if (!getAMQPConnection().isIOThread() || isClosing()) { return false; } updateBlockedStateIfNecessary(); if(!_consumersWithPendingWork.isEmpty() && !getAMQPConnection().isTransportBlockedForWriting()) { if (_processPendingIterator == null || !_processPendingIterator.hasNext()) { _processPendingIterator = _consumersWithPendingWork.iterator(); } if(_processPendingIterator.hasNext()) { AbstractConsumerTarget target = _processPendingIterator.next(); _processPendingIterator.remove(); if (target.processPending()) { _consumersWithPendingWork.add(target); } } } return !_consumersWithPendingWork.isEmpty() && !getAMQPConnection().isTransportBlockedForWriting(); }
@Override public void addTicker(final Ticker ticker) { _connection.getAggregateTicker().addTicker(ticker); // trigger a wakeup to ensure the ticker will be taken into account getAMQPConnection().notifyWork(); }