@Override public PubSubMessage receive() throws PubSubException { if (uncommittedMessages.size() >= maxUncommittedMessages) { log.warn("Reached limit of max uncommitted messages: {}. Waiting for commits to proceed.", maxUncommittedMessages); return null; } if (!haveMessages()) { return null; } PubSubMessage message = receivedMessages.remove(0); uncommittedMessages.put(ImmutablePair.of(message.getId(), message.getSequence()), message); return message; }