2015-01-23 2 views
-1

CSV 파일에서 연락처를 가져오고 있으며 Google App Engine의 blobstore 서비스를 사용하여 BLOB를 저장하고 BLOB 키를 작업 대기열 URL에 매개 변수로 보냅니다. 따라서 작업 대기열 url은 BLOB 키를 사용하여 CSV 파일을 구문 분석하고 데이터 저장소에 저장할 수 있습니다.Google 애플리케이션 엔진의 기본 작업 대기열이 끝없이 실행되는 이유는 무엇입니까?

여기는 작업 대기열을 생성하기위한 Java 코드입니다.

대기열 queue = QueueFactory.getDefaultQueue();

queue.add (TaskOptions.Builder.withUrl ("/ queuetoimport"). param ("contactsToImport", contactsDetail));

작업 큐가 실제로 실행되지만 끝나지 않습니다. 그것은 수동으로 삭제할 때까지 끝없이 데이터 저장소에 동일한 연락처를 저장하는 계속됩니다.

어떤 이유가있을 수 있습니다.

+3

작업 처리기가 반환하는 HTTP 상태 코드는 무엇입니까? 200..299 범위 외의 상태 코드 인 경우 https://cloud.google.com/appengine/docs/python/taskqueue/overview-push#task_deadlines –

+0

에 대한 정보를 보내 주셔서 감사합니다. 문제가 해결되었습니다. 그것은 캐리지 리턴 때문에 CSV 파일 끝에 통지하지 못하여 작업 처리기가 끝내지 않고 다시 시도하는 예외를 발생시킵니다. –

답변

2

오류 복구를 위해 수행됩니다. 예를 들어 네트워크에서 JSON 피드를 가져 와서 구문 분석하고 데이터베이스에 저장하는 작업 ... 네트워크 연결이 실패하거나 시간이 초과 된 경우 또는 반환 된 피드가 발생한 경우를 가정 해 보겠습니다. 일시적으로 나쁘고 분석 할 수 없거나 다른 수의 간헐적 인 확률 론적 실패 원인에 대해이 자동 재시도 동작 (기하 급수적 인 복귀)은 작업이 결국 성공적으로 완료되었는지 확인합니다 (실패가 실패로 끝날 수 있다고 가정). 다시 시도하고 매번 실패를 보장하는 프로그래머 오류가 아닙니다.) 작업의 HTTP 상태 코드는 작업 완료 방법을 결정 (성공 또는 실패)하여 재 시도해야 하는지를 결정하는 데 사용됩니다. 작업을 다시 시도하지 않으려면 성공적으로 완료되었는지 확인하고 2xx 레벨 코드 중 하나 인 성공 상태 코드를 사용하여 App Engine에 알립니다.

연락처 예를 고려해 볼 때 연락처가 저장되어 있는지 확인하려면 (예 : 작업 처리기에 일시적인 결함이 있어도) 연락처를 저장하면 사용자 데이터가 자동으로 삭제되는 것보다 훨씬 좋습니다.

+0

정보 주셔서 감사합니다. 문제가 해결되었습니다. 그것은 캐리지 리턴 때문에 CSV 파일 끝에 통지하지 못하여 작업 처리기가 끝내지 않고 다시 시도하는 예외를 발생시킵니다. –