I have a java client of google-pubsub api.
I sent 4 messages at the same time to the pubsub.
My subscriber is triggered once an hour and loop on the pubsub till it's empty.
Nevertheless I see the messages are fetched in different times even though they were all sent at the same time and there was a long delay till the next automated subscriber synchronised fetch.
// A hotfix as cofman is too slow for ack
while (pubSubIsFull) {
// Fetch messages by order
log("before fetched messages by order");
List<ReceivedMessage> messages = mySyncSubscriber.fetch(100000, true);
messages = messages.stream().sorted(Comparator.comparingLong(message2 -> message2.getMessage().getPublishTime().getSeconds())).collect(Collectors.toList());
log("fetched " + messages.size() + " messages by order");
pubSubIsFull = messages.size() > 0;
log("before processMessages");
List<String> ackIds = processMessages(messages);
log("after processMessages");
mySyncSubscriber.sendAck(ackIds);
}
import com.google.pubsub.v1.PullRequest.Builder;
public List<ReceivedMessage> fetch(int maxMessages, boolean returnImmediately) {
String subscriptionName = this.getSubscriptionName(this.getSubscriptionId()).toString();
Builder pullRequestBuilder = PullRequest.newBuilder().setSubscription(subscriptionName).setReturnImmediately(returnImmediately);
if (maxMessages != 0) {
pullRequestBuilder.setMaxMessages(maxMessages);
}
PullRequest pullRequest = pullRequestBuilder.build();
PullResponse pullResponse = (PullResponse)this.subscriber.pullCallable().call(pullRequest);
return pullResponse.getReceivedMessagesList();
}
Is this a bug in pub sub?
Is there something I can do to change it?