Google Cloud MessagingとFirefox Push Notification Systemを介してブラウザプッシュ通知の送信を実装しています。このためには、GCMとFPNSへのHTTP投稿リクエストを作成する必要があります。Javaサーブレットブラウザプッシュ通知のアーキテクチャ
GCM/FPNSにHTTPリクエストを行うには、ユーザー登録IDが必要です。 JavaScriptを使用して、登録IDを収集し、それをCassandraに保管しています。各レコードには、ユーザー登録情報(登録IDとブラウザー・タイプ)が入っています。
HTTPリクエストをGCM/FPNSに送信すると、ブラウザの種類に基づいてGCM/FPNSにリクエストとともに登録IDを送信する必要があります(ユーザー登録IDがChromeに属している場合は、たとえば、10,000レコードがある場合、FPNS/GCMに対して約10,000件の要求を行う必要があります。
GCM/FPNSがユーザー登録IDを受信すると、ブラウザーにプッシュ通知が送信されます。ブラウザでは、通知イベントを処理するJavaScriptコード(Service Worker)があります。
上記の要件では、同期サーブレットのアーキテクチャでは十分ではありません。 10,000レコードを処理するため、マルチスレッドを使用していても10〜15分かかることがあります。 Tomcatのメモリリークやメモリ不足の例外が発生する可能性があります。
私がオンラインで検索していたとき、人々は非同期サーブレットアーキテクチャを提案しています。通知を送信するクライアントからの要求を受けたら、すぐに応答します(200 Ok Added to queue
など)。また、この要求をMessage Queue(JMS)に追加する必要があります。 JMSでは、マルチスレッド化を使用して非同期HTTP要求を行います。
これを行う正しい方法が見つかりません。この機能を実装する方法を提案できますか(アーキテクチャ設計と制御フロー)?