google-cloud-platform - Google Cloud Pub/Sub 推送订阅在消息处理期间重试消息传递
问题描述
我正在运行一个基于 Java 8 servlet 的应用程序作为 Google Cloud Pub/Sub 推送端点。确认截止时间为 600 秒。服务器是嵌入式 Jetty 9.4。
假设我有一条消息M
,我知道要通过我的推送订阅发布到该主题。
我的端点在确认消息之前需要很长时间来处理消息。ProcessBuilder
它执行有时可以运行很长时间的脚本(作为使用 Java 类的子进程)。假设我M
在上午 8:00:00 收到消息。我的脚本开始运行,推送订阅发送的请求仍然处于活动状态。然后,在上午 8:00:30,我收到了同样的消息M
,即使我没有返回200
或500
响应之前的请求。
当我在本地测试我的应用程序时,我可以200
在 40 秒或更长时间后发布响应。
我怎样才能解决这个问题?我知道我可能应该使用请求订阅,但我观察到的行为没有记录,或者至少我找不到它。
解决方案
确认截止日期并不能保证在该时间段内不会重新传递消息;这是最好的努力。对于长期存在的推送请求,如果服务器认为传出请求已终止,则可以重新传递消息,这更有可能是请求处于活动状态的时间越长。可能是与您的服务器的连接不稳定,或者可能是某种服务器端截止日期,它以比您的处理代码更高的级别响应请求。
您可以查看推送订阅的Stackdriver指标,特别是查看,您可以按响应细分,看看 Cloud Pub/Sub 是否认为正在返回错误响应。subscription/push_request_count
推荐阅读
- python-3.x - Sympy Segment 相交顺序依赖
- javascript - 为服务器上生成的文件创建“另存为”按钮
- javascript - 如何复制表格的特定部分?
- javascript - 光滑的轮播图像不会缩放
- php - 如何将一个表单数据更新到 Laravel 中的不同表?
- javascript - Angularjs,更新数组中的值
- jquery - 如何在鼠标单击中获得 JQuery 自动完成选项?
- streamsets - 无法将数据写入 MySql 的流集中的 JDBC 生产者
- javascript - Javascript中嵌套if语句(函数内)的问题
- javascript - WordPress 附件分类复选框组未保存在网格视图中