我有一个由PubSub消息触发的Firebase功能,并处理需要对Google Drive API进行的一系列调用。如果由于速率限制错误而导致Google Drive API调用失败,我想重试这些调用。我将调用添加到新的PubSub消息并将其添加到队列中。此消息将立即发送。因此,我设置延迟直到消息中的参数,并且仅在延迟已经过去时处理消息,否则再次将消息添加到队列。这导致消息被多次传递和重试。 Firebase函数中是否有一种方法让侦听器不接受消息?然后我可以在PubSub队列上设置重试延迟。
答案 0 :(得分:0)
我会从Google Drive API端或PubSub端查看此内容。
第一个建议是在获取速率时调用Google Drive API时使用exponential backoff,如API docs中所述。
另一个建议是,在您对Google Drive API的调用成功后,只有ACK来自PubSub 的消息。根据您的acknowledgement deadline settings,这将基本上阻止消息重新出现在队列中,直到您确认或截止日期为止。如果你没有确认消息,它将在截止日期过后自动返回队列。
像你这样的情况是这种ACK机制到位的原因。