簡體   English   中英

google pub sub在不同時間提取消息

[英]google pub sub fetches messages in different times

我有一個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(如我對您的其他問題的回復中所述 )。 至少,在確定沒有可用消息之前,您需要確保一段時間內的多個請求都返回0條消息。 更好的方法是查詢subscription/num_undelivered_messages ,它指示訂閱尚未確認的消息數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM