2010-01-07 4 views
1

크기가 379KB 인 메일을 보내려고하는 Google 애플리케이션 엔진 코드가 있습니다. 메일에는 "받는 사람"목록에있는 사람과 "숨은 참조"목록에있는 사람이 있습니다. 분명히 GAE는 첨부 파일 크기가 758KB (379 * 2) 인 메일을 2 개의 다른 메일로 처리하므로 분 당 할당량 500KB/분을 초과하므로 QuotaExceededException이 발생합니다. 메일이 "받는 사람"목록의받는 사람에게 도달하는 동안 숨은 참조 (Bcc)에있는 사람이 메일을받지 못합니다.Google 애플리케이션 엔진 - 작업 대기열은 QuotaExceededException에 대한 해결책입니까?

이 문제를 해결하기 위해 작업 대기열 서비스를 고려할 수 있습니까? 작업 큐 프레임 워크는 QuotaExceededException이 발생할 때마다 메일을받지 못한 수신자에게 메일의 전송을 다시 시도합니까?

또한 여러 사용자에게 동일한 메일 (첨부 파일 포함)을 보낼 수 있도록 위 코드를 확장 할 계획입니다. 모든 수신자에게 시간 간격없이 전송하려고하면 QuotaExceededException가 발생합니다. 이 경우 태스크 대기열 서비스가 어떤 식 으로든 도움이 될 수 있습니까?

답변

2

거의. 작업 큐는 작업이 성공할 때까지 작업을 다시 시도하지만 전체 작업을 다시 시도합니다. AFAIK는 부분적인 성공에 대해 아무것도 모르고 기억하지 못합니다. 따라서 작업 (두 명의받는 사람에게 보내는)을 작업으로 수행하는 경우 작업에서 전자 메일을 계속 보내지 만 전체적으로는 1 분에 한 번씩받는 사람 : 필드의받는 사람에게 나쁜 일이 일어날 것으로 판단됩니다. 영원히 ...

따라서 동일한 큐의 두 작업 (각받는 사람에 대해 하나의 작업)을 사용하는 것이 좋습니다.

+0

감사합니다 steve..shall 이것을 시도하십시오 – Aadith

+0

나는 스티브에 동의합니다. 작업 대기열의 각 작업은 하나의 수신자에게만 보낼 수 있습니다. 그렇지 않으면 지금 가지고있는 문제와 똑같은 문제가 생깁니다. –

5

저는 작업 대기열이이 유스 케이스를 멋지게 커버 할 것이라고 생각합니다. 사실, Google이 자사의 documentation of Task Queues에서 사용하는 예는 전자 메일을 통해 전송되는 예입니다.

두 가지 생각 :

  1. 구글 프로덕션 코드이 를 사용하는 경우, 그래서 미래 릴리스에서 변경 의 대상이 될 수있는 실험적인 기능으로 작업 대기열을 나열 준비 에 대한 응용 프로그램의 동작이 갑자기 및 경고없이 으로 변경됩니다.
  2. 대기열을 으로 구성하여 보다 더 빨리 이메일을 처리하지 않아야합니다. 할당량 위반. 설명서의 대기열 개념 섹션을 확인하십시오.

마지막으로이 큰 첨부 파일을 URL로 호스팅하고 이메일에 링크가 포함되어 있다고 생각하십니까? 그렇게하면 전자 메일을 훨씬 쉽게 보낼 수있게되고 전체 수신 대역폭에 좋을 것입니다.받는 사람 만 실제로받을 수 있기 때문입니다.

+0

감사합니다 adam 예 ..i 링크에 넣는 것을 고려했습니다. 옵션이 없습니다.이 특별한 경우를 추구 할 수 있습니다. – Aadith

+0

Adam, 또 다른 빠른 질문 .. QuotaException을 직면하지 않고 여러 메일을 연속적으로 보내려면 thread.currentThread()를 수행하는 것이 좋습니다. 각 메일 전송 후 sleep (1 분)? – Aadith

+0

Aadith, AppEngine에서 스레딩 기능을 사용할 수 없습니다. 그들은 허용되지 않습니다. 또한 요청 당 최대 30 초까지 실행됩니다. 이를 처리하는 올바른 방법은 분당 한 번만 요청을 처리하도록 작업 대기열을 구성하는 것입니다. 작업 대기열 구성에 대한 자세한 내용은 http://code.google.com/appengine/docs/python/config/queue에서 확인할 수 있습니다.html –

관련 문제