@Override public void commit(String id, int sequence) { super.commit(id, sequence); emittedIDs.remove(ImmutablePair.of(id, sequence)); }
/** * Returns true if we already have messages to emit or if {@link BufferingSubscriber#getMessages()} returns non-null * and non-empty {@link List} of messages. Otherwise, returns false. * * @return A boolean denoting whether we do have messages to emit. * @throws PubSubException if there was an issue reading the messages. */ protected boolean haveMessages() throws PubSubException { if (!receivedMessages.isEmpty()) { return true; } List<PubSubMessage> messages = getMessages(); if (messages == null || messages.isEmpty()) { return false; } receivedMessages.addAll(messages); return true; }
@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; }
@Override public void commit(String id, int sequence) { super.commit(id, sequence); emittedIDs.remove(ImmutablePair.of(id, sequence)); }