【问题标题】:即使在使用 GCP REST API 确认后,消息仍保留在 GCP Pub/Sub 中
【发布时间】:2022-01-03 15:32:39
【问题描述】:

我正在使用以下 GCP Pub/Sub 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..."
  ]
}

我正在使用邮递员工具调用上述API。但是即使在确认之后,当我下次拉消息时,我也可以看到具有相同messageId和不同ackId的相同消息。是否有任何机制可以排除gcp pull (subscriptions/mysubscription:pull) 中确认的消息

【问题讨论】:

  • 在 Google Cloud Pub/sub 中,即使在消息被确认后,也会出现一些重复的消息。您是否看到大量重复项?您可以尝试延长您的 AckDeadline 吗?
  • 只有使用下面的api我们可以编辑ackDeadline。但是需要在api请求中提供ackIds。是否可以更改主题中所有消息的ackDeadline。 POST pubsub.googleapis.com/v1{subscription}:modifyAckDeadline { "ackIds": [ string ], "ackDeadlineSeconds": integer }
  • 正如document 中提到的, modifyAckDeadline 修改特定消息的确认截止日期。要更改订阅中所有消息的 ackDeadline,您可以从控制台更改“确认截止时间”。

标签: google-cloud-platform google-cloud-pubsub


【解决方案1】:

Cloud Pub/Sub 是一个at-least-once delivery system,因此预计会有一些重复。但是,如果您总是看到重复消息,则很可能在确认截止日期过去之前您没有确认消息。默认的确认截止时间是 10 秒。如果您在该时间段内没有调用 ack,则消息将被重新传递。您可以将订阅的确认截止时间设置为最长 600 秒。

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

【讨论】:

    猜你喜欢
    • 2020-02-05
    • 2019-04-10
    • 2019-04-10
    • 2021-10-09
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 2021-11-08
    • 2021-08-20
    相关资源
    最近更新 更多