将消息传送给拉取型订阅者后,订阅者必须在确认时限内处理并确认(ACK)消息。否则,订阅方必须通过调用修改确认期限来延长期限。
Pub/Sub 高级客户端库提供租约管理功能,可自动延长尚未确认的消息的截止期限。默认情况下,客户端库可以通过定期发出 modifyAckDeadline 请求将截止期限延长到一小时。适用于 Python、Go、Java 和 .Net 的高级客户端库使用确认延迟的第 99 百分位数来确定每次延长的时间。
与配置订阅级属性相比,租约管理可让您更精细地控制消息的确认期限。如果您仅使用订阅级确认期限,则需要在较低值和较高值之间权衡利弊。值越低,重复邮件的可能性就越大;值越高,则会延迟重新传送失败邮件。确定正确的值可能很困难,尤其是当不同消息的预期处理时间差异很大时。
如需详细了解订阅的属性(包括确认期限),请参阅订阅属性。
租约管理配置
您可以在高级客户端库中配置以下属性,以控制租约管理。
确认延期期限上限。您可以使用
modify acknowledgment deadline
请求延长消息确认期限的最长时间。借助此属性,您可以确定希望订阅方客户端处理消息的时长。每个确认扩展的时长上限。延长每个
modify acknowledgment deadline
请求的确认期限的最长时间。借助此属性,您可以定义 Pub/Sub 重新传送消息所需的时间。当处理消息的第一位订阅者发生崩溃或变得不健康,并且无法再发送modify acknowledgment deadline
请求时,就会发生重新传送。每个确认扩展的最短时长。延长每个
modify acknowledgment deadline
请求的确认期限的最短时间。借助此属性,您可以指定在重新传送消息之前必须经过的最短时间。
除非您启用恰好一次传送,否则无法保证系统会遵守确认期限。
手动管理确认时限
为了避免在使用单调拉取或低级客户端库时消息过期和重新提交,请使用 modify acknowledgment deadline
请求延长确认时限。唯一的例外是 Go 和 C++ 高级客户端库,它们在使用单个拉取时提供租约管理。如需了解带租约管理的单个拉取操作,请参阅以下示例:
C#
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 C# 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub C# API 参考文档。
Java
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Java 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Java API 参考文档。
Node.js
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Node.js 设置说明进行操作。如需了解详情,请参阅 Pub/Sub Node.js API 参考文档。
Python
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Python 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Python API 参考文档。
Ruby
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Ruby 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Ruby API 参考文档。
后续步骤
了解您可以为订阅配置的其他提交选项: