java - 如果 Google Cloud Pub/Sub 在 30 秒内未收到响应,则会重试消息传递。故意的?
问题描述
我使用 Java 8 servlet 作为 Cloud Pub/Sub 推送端点。在我的推送端点上,我有一个长时间运行的阻塞操作,有时会运行超过一分钟。操作完成后,我返回200
响应,确认消息。
如果我返回500
服务器错误,则会重试该消息,这是预期的。
请注意,我创建的订阅的最大允许期限确认时间为 600 秒。
我注意到的是,如果我的长时间运行的操作运行超过 30 秒,该消息也会被重试。似乎用于推送传递的 HTTP 连接不会超过 30 秒或其他时间。
这是故意的吗?它可以以某种方式配置吗?提前致谢。
解决方案
对于推送订阅,Cloud Pub/Sub 不会发送否定确认(有时称为 nack)。如果您的 webhook 未在确认截止日期内返回成功代码,Cloud Pub/Sub 会重试传递,直到消息在订阅的消息保留期过后过期。您可以在创建推送订阅时为推送订阅配置默认确认截止时间(选择推送订阅并设置确认截止时间)。
请注意,与拉取订阅不同,单个消息的截止日期不能延长。截止日期实际上是端点必须响应推送请求的时间量。
推荐阅读
- python - python cesar密码问题
- jquery - 使用 jquery ajax json 从 spring rest api 接收数据到 HTML
- mysql - Dll 未找到异常 MYSQL Connector-.Net
- python - 如何根据来自配置文件(文本或 CSV)的用户输入过滤熊猫数据框 配置将告诉过滤器值和用于过滤的列
- java - Linux上Java中的内存操作
- java - 加法持久性算法 Java
- assembly - 8位的普通减法运算
- hibernate - 使用 json 创建 @ManyToOne 对象
- php - ErrorException 从空值创建默认对象 - laravel 5.4
- grep - grep lookbehind with anchor 意外结果