2017-05-18 18 views
0

私のアプリケーションエンジンのアプリは、電子メールの処理、送信などのためにSendGridから通知を受け取ります.Sendgridはこれらの通知のバッチ処理をほとんど行わないため、GAEを使用した着信通知のバッチ処理

最後の1分に受け取ったすべての通知の処理(トランザクションには処理が含まれているので、競合を避けるためにそれらを組み合わせる必要があります)などの受信通知のバッチ処理を行いたいとします。

私は、入ってくる通知を格納するための...これにはいくつかの方法があるようにもできそうです:

  1. データストアまたは
  2. にエンティティを追加プルキュータスクを作成します。
  3. 処理をトリガするため

、私でした:

  1. ランcronジョブ毎分または
  2. が着信Sendgridリクエストを処理するハンドラは、通知の処理をトリガしている(これは良いアイデアです?)しかし、最後のトリガーが1分以上前であった場合(memcacheに最後のトリガーの日付を格納することができます)。

私は、上記または他のアプローチの長所と短所を耳にしたいと思います。

答えて

0

数日後、私はかなりうまく動作する実装を考え出しました。

着信通知を格納するために、データをプルキュータスクに格納します。私は自分の質問の時点であなたが実際に任意の生データをタスクに保存できることは知らなかったし、タスク自体が関数の実行である必要はない。入ってくるデータをデータストアに保存することもできますが、自分でプルタスクを作成して並べ替えて、GAEが提供するプルタスクを作成することもできます。

作業者がプルキュー内のタスクを処理するようにするために、元のGAE開発者がこの優秀なブログの投稿On-demand Cron Jobsを紹介しました。私はここでその記事全体を繰り返すことはしませんが、基本的な考え方は、プルキューにタスクを追加するたびに、プルキュー内のタスクを処理するワーカータスク(通常のプッシュキュー)を作成することです。ワーカー・タスクでは、時間間隔に対応するタスク名を追加して、その時間間隔内に1つのワーカー・タスクしか持たないようにします。 1分のCRONジョブの利点を得ることができますが、必要なときに実行するだけで実行する追加のパフォーマンスボーナスは、不要なときにCRONジョブを実行しないようにします。

関連する問題