pubsub 메시지를받는 appengine 앱이 있습니다.App Engine> 60 초 백엔드 처리?
60 초 이상 걸릴 수있는 데이터를 처리 중입니다.
요청 처리기가 limited (60 초)이므로 즉시 pubsub를 확인한 다음 처리합니다.
비록 이것이 도움이되지 않습니다 - 내가 보낸 메시지는 처리가 완료 되었음에도 불구하고 계속해서 다시 시도됩니다 (로거에서 보았습니다). 여기
내 코드입니다 :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
질문 수 :
- 이 올바른 방법으로하는 것입니다 펍을 인정해?
- 승인 후 프로세스가 60 초 이상 걸릴 수 있습니까?
- 예인 경우 - 내 pubsub 메시지가 계속해서 다시 보내지는 이유는 무엇입니까?
- 그렇지 않은 경우 수행 할 수있는 작업 - 작업 대기열을 사용할 수없는 경우?
데이터 저장소 대신 google-storage를 사용할 수 있습니까? 저장 프로세스가 60 초 이내에 완료됩니까? – dina
도 내가 docs에서 알기에 - 요청 처리기에는 요청에 대한 응답을 생성하고 반환하는 시간이 제한되어 있습니다 (일반적으로 약 60 초). 그래서 위의 코드에서 회신하지 않고 계속할 수 있습니까? 와트는 약 60 초 동안 제한됩니까? 응답 회신에 대해? 또는 afterword 처리? – dina
1. 원하는 경우 Cloud Datastore 대신 Cloud Storage를 사용해 볼 수 있습니다. 2. 위의 코드에서 회신을 작성하고 그 후에 서블릿 스레드를 계속 사용합니다. 따라서 60 초의 시간 제한이'doSomethingWithPayload' 호출에 적용됩니다. –