我正在使用以下 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)中是否有任何机制可以排除确认的消息
Cloud Pub/Sub 是一个至少一次的交付系统,因此预计会出现一些重复项。但是,如果您总是看到重复项,则很可能是在确认截止日期过后未确认消息。默认确认截止时间为 10 秒。如果您未在该时间段内调用 ack,则将重新传递邮件。您可以将订阅的确认截止时间设置为最多 600 秒。
如果预计所有消息都需要更长的处理时间,那么最好增加确认截止日期。如果只有几条消息会很慢,而大多数消息的处理速度很快,那么最好使用 modifyAckDeadline 调用来增加每条消息的 ack 截止时间。