【发布时间】:2016-12-21 21:58:03
【问题描述】:
我有一个接收 pubsub 消息的 appengine 应用。
我正在处理可能需要超过 60 秒的数据。
由于请求处理程序是limited 60 秒,我立即确认发布订阅,然后进行处理。
尽管这无济于事 - 我发送的消息会一次又一次地重试(我在记录器中看到),即使处理已完成。
这是我的代码:
public class Handler extends HttpServlet {
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
// Acknowledge the message by returning a success code
resp.setStatus(HttpServletResponse.SC_OK);
resp.getWriter().close();
JsonParser parser = JacksonFactory.getDefaultInstance().createJsonParser(req.getInputStream());
parser.skipToKey("message");
PubsubMessage message = parser.parseAndClose(PubsubMessage.class);
log.info("request was received " + message.getMessageId());
String payload = new String(message.decodeData(), "UTF-8");
doSomthingWithPayload(payload); // this takes more than 60 seconds
}
}
我尝试使用任务队列,但由于我的数据非常大,我得到Task size too large
问题:
- 这是确认 pubsub 的正确方式吗?
- 确认后该过程是否需要超过 60 秒?
- 如果是 - 为什么我的 pubsub 消息会一次又一次地重新发送?
- 如果不是:我可以做些什么来解决 - 虽然我不能使用任务队列?
【问题讨论】: