首页 > 解决方案 > 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,即使我没有返回200500响应之前的请求。

当我在本地测试我的应用程序时,我可以200在 40 秒或更长时间后发布响应。

我怎样才能解决这个问题?我知道我可能应该使用请求订阅,但我观察到的行为没有记录,或者至少我找不到它。

标签: google-cloud-platformsubscriptiongoogle-cloud-pubsub

解决方案


确认截止日期并不能保证在该时间段内不会重新传递消息;这是最好的努力。对于长期存在的推送请求,如果服务器认为传出请求已终止,则可以重新传递消息,这更有可能是请求处于活动状态的时间越长。可能是与您的服务器的连接不稳定,或者可能是某种服务器端截止日期,它以比您的处理代码更高的级别响应请求。

您可以查看推送订阅的Stackdriver指标,特别是查看,您可以按响应细分,看看 Cloud Pub/Sub 是否认为正在返回错误响应。subscription/push_request_count


推荐阅读