当消息递送给拉取订阅者时,订阅者必须在确认时限内处理并确认 (ack) 消息。否则,订阅者必须通过调用来修改确认截止时间,以延长截止时间。
Pub/Sub 高级客户端库提供租约管理功能,可自动延长尚未确认的消息的时限。默认情况下,客户端库可以通过定期发出 modifyAckDeadline 请求将时限延长至一小时。Python、Go 和 Java 的高级客户端库使用第 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 客户端库 v3。如果您仍在使用 v2 库,请参阅 迁移到 v3 的指南。如需查看 Ruby v2 代码示例的列表,请参阅 已弃用的代码示例。
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Ruby 设置说明进行操作。如需了解详情,请参阅 Pub/Sub Ruby API 参考文档。
后续步骤
了解您可以为订阅配置的其他传送选项: