2017-05-18 4 views
0

내 앱 엔진 앱이 이메일 전송 처리를 위해 SendGrid로부터 알림을 수신하고 열립니다. Sendgrid는 이러한 알림을 일괄 처리하지 않기 때문에 초당 여러 번 수신 할 수 있습니다.GAE에서 들어오는 알림 일괄 처리

수신 통지의 일괄 처리 (예 : 처리에 트랜잭션이 포함되어 있으므로 경쟁을 피하기 위해 필요함)가 마지막 순간에 수신 된 모든 통지 처리와 같은 일괄 처리를하고 싶습니다.

  1. 는 데이터 저장소에 엔티티를 추가하거나
  2. 는 풀 큐 작업을 만들 : 나는 수, 수신 알림을 저장하기 위해이 일을 여러 가지 방법으로 ...

    이 될 것 같다.

  3. 처리를 트리거

, I 수 :

  1. 실행 cron 작업 매 분
  2. 들어오는 Sendgrid 요청을 처리하는 핸들러 알림의 처리를 트리거 있나요 (이것은 좋은 생각?) 하지만 마지막 트리거가 1 분 이상 지난 경우에만 (memcache에 마지막 트리거 날짜를 저장할 수 있음).

나는 위의 또는 다른 접근법의 장단점을 듣고 싶습니다.

답변

0

며칠 후, 나는 꽤 잘 작동하는 구현을 생각해 냈습니다.

들어오는 알림을 저장하기 위해 데이터를 끌어 대기열 작업에 저장합니다. 내 질문에 당신이 실제로 작업에 원하는 모든 원시 데이터를 저장할 수 있다는 것을 몰랐다. 그리고 그 자체로 기능을 수행 할 필요는 없다. 들어오는 데이터를 데이터 저장소에 저장할 수는 있지만 GAE에서 제공하는 끌어 오기 작업을 수행 할 수 있도록 자신 만의 끌어 오기 작업을 만들 수 있습니다.

작업자가 끌어 오기 대기열에서 작업을 처리하도록 유도하기 위해 전 GAE 개발자가 On-demand Cron Jobs에 대한 우수한 블로그 게시물을 발견했습니다. 전체 게시물을 여기에서 반복하고 싶지는 않지만 기본 아이디어는 끌어 오기 대기열에 작업을 추가 할 때마다 끌어 오기 대기열에서 작업을 처리 할 작업자 작업 (일반 밀어 넣기 대기열)을 만드는 것입니다. 작업자 작업의 경우 시간 간격에 해당하는 작업 이름을 추가하여 시간 간격에 하나의 작업자 작업 만 있는지 확인합니다. 이 기능을 사용하면 1 분짜리 CRON 작업의 이점을 얻을 수 있지만 필요할 때만 실행되는 추가 성능 보너스가 있으므로 필요하지 않을 때 CRON 작업이 실행되지 않습니다.