gpt4 book ai didi

java - google pub sub 在不同时间获取消息

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:08:28 26 4
gpt4 key购买 nike

我有一个 google-pubsub api 的 java 客户端。

我同时向 pubsub 发送了 4 条消息。

我的订阅者每小时触发一次并在 pubsub 上循环直到它为空。

尽管如此,我看到消息是在不同的时间提取的,即使它们都是在同一时间发送的,并且在下一个自动订阅者同步提取之前有很长的延迟。

// 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();
}

这是 pub sub 中的错误吗?

我可以做些什么来改变它吗?

最佳答案

Cloud Pub/Sub 不提供订购保证。如果您发布多条消息——即使相隔一段时间——然后稍后获取所有消息,则无法保证订阅者首先接收到较早发布的消息。

此外,在单个响应中收到 0 条消息并不是确定没有可用消息的好方法。有时响应将包含 0 条消息,即使有消息可用,尤其是当 returnImmediately 设置为 true 时(如 my response to your other question 中所述)。至少,在确定没有可用消息之前,您需要确保一段时间内的多个请求都返回 0 条消息。更好的办法是查询 Stackdriver metric for subscription/num_undelivered_messages ,表示您的订阅尚未确认的消息数。

关于java - google pub sub 在不同时间获取消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50253098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com