提问者:小点点

即使在使用GCP REST API确认后,消息仍保留在GCP发布/订阅中


我正在使用以下 GCP 发布/订阅 REST API 来拉取和确认消息。用于拉取消息:-

POST https://pubsub.googleapis.com/v1/projects/myproject/subscriptions/mysubscription:pull
{
  "returnImmediately": "false",
  "maxMessages": "10"
}

要确认消息:-

POST https://pubsub.googleapis.com/v1/projects/myproject/subscriptions/mysubscription:acknowledge
{
  "ackIds": [
    "dQNNHlAbEGEIBERNK0EPKVgUWQYyODM2LwgRHFEZDDsLRk1SK..."
  ]
}

我使用postman工具来调用上面的API。但是,当我下次提取消息时,即使在确认之后,我也可以看到具有相同messageId和不同ackId的相同消息。在GCP pull(subscriptions/my subscription:pull)中是否有任何机制可以排除确认的消息


共1个答案

匿名用户

Cloud Pub/Sub 是一个至少一次的交付系统,因此预计会出现一些重复项。但是,如果您总是看到重复项,则很可能是在确认截止日期过后未确认消息。默认确认截止时间为 10 秒。如果您未在该时间段内调用 ack,则将重新传递邮件。您可以将订阅的确认截止时间设置为最多 600 秒。

如果预计所有消息都需要更长的处理时间,那么最好增加确认截止日期。如果只有几条消息会很慢,而大多数消息的处理速度很快,那么最好使用 modifyAckDeadline 调用来增加每条消息的 ack 截止时间。