private void increaseAvailablePermits(ClientCnx currentCnx, int delta) { int available = AVAILABLE_PERMITS_UPDATER.addAndGet(this, delta); while (available >= receiverQueueRefillThreshold) { if (AVAILABLE_PERMITS_UPDATER.compareAndSet(this, available, 0)) { sendFlowPermitsToBroker(currentCnx, available); break; } else { available = AVAILABLE_PERMITS_UPDATER.get(this); } } }
@Override protected CompletableFuture<Message> internalReceiveAsync() { CompletableFuture<Message> result = new CompletableFuture<Message>(); Message message = null; try { lock.writeLock().lock(); message = incomingMessages.poll(0, TimeUnit.MILLISECONDS); if (message == null) { pendingReceives.add(result); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); result.completeExceptionally(e); } finally { lock.writeLock().unlock(); } if (message == null && conf.getReceiverQueueSize() == 0) { sendFlowPermitsToBroker(cnx(), 1); } else if (message != null) { messageProcessed(message); result.complete(message); } return result; }
private void starReceivingMessages() throws PulsarClientException { for (ConsumerImpl consumer : consumers) { consumer.sendFlowPermitsToBroker(consumer.cnx(), conf.getReceiverQueueSize()); receiveMessageFromConsumer(consumer); } }
synchronized (this) { if (isConnected()) { sendFlowPermitsToBroker(cnx(), 1);
sendFlowPermitsToBroker(cnx, 1); sendFlowPermitsToBroker(cnx, conf.getReceiverQueueSize());