Java Mail APIを使用したIMAPフェッチ用のJavaのAKKAクラスタ
-
21-12-2019 - |
質問
IMAP
に接続し、データベースに保存するように電子メールデータを持参してください。
今そのような仕事は、多くのIMAP
アカウントをサポートするための巨大なボリュームを持つでしょう。ネットワーク内の事前定義されたマシンのセットでこれらのジョブを実行できるAkkaクラスタ機能を活用し、IMAP
ホストからのデータをフェッチしながらエラーが発生した場合のリテイラを実行します。
私は、IMAP
Fetchジョブを起動するAkkaクラスタを作成したい(俳優を介して?? !!)。
IMAP
はトリッキーなプロトコルで、リモートホストへの接続に失敗する可能性があります。そのような場合、俳優は接続して取得するためにいくつかの設定可能な時間を再試行する必要があります。
最終的には、IMAP
フェッチバックエンドとして機能する必要があります。
どうすればいいですか?
解決
JavaMail / IMAPを使用して、ユーザーの電子メールアカウントから新しいメッセージを接続したり処理したりすることを含めて、Akkaを使います。フォールトトレランスはパズルの重要な部分です。これが私たちのバックエンドがどのように設定されているかです。
- スーパーバイザノードには、Process for の場合、DBからユーザーを選択するアクターがあります。
- IMAP労働者の俳優が職員に通知しているとき(この「作業引出し」アーキテクチャについては、私の同僚Ryan Tannerのブログ投稿を参照してください。
http://blog.goconspire.com/akka-at-conspire-part-5 - 可能性の高い) - スーパーバイザはProcessAccountメッセージを送信します - Gmail OAuthトークンを含むカスタムオブジェクト(従来のユーザー名とパスワードの資格情報も使用できます) - アイドルIMAPワーカーへ。
- IMAPワーカーはJavaMailを使用して新しいメッセージを読み書きします。エラーでは、エラーコードと人間が読める文字列を含むカスタムオブジェクトをスーパーバイザアクターに戻すカスタムオブジェクトを送信します。成功すると、完成した処理を送信します。
- スーパーバイザは、処理が失敗した場合にエラーコードを設定するなど、データベース内のユーザーレコードを更新します。
- 定期的に健康的なアカウントを処理することに加えて、スーパーバイザは失敗したアカウントの処理を再試行します。私たちのユースケースは、1日に1回再処理を試みるだけですが、それほど頻繁に行うことができます。
AKKAクラスタリングを使用すると、労働者はスーパーバイザから区別します。このアプローチを上述した作業引出し機構と組み合わせると、回復不能な誤差に対して比較的耐性があります。労働者の中のOutofMemoryerrors。
他のヒント
JavaMailを使用します。 javamailに関するよくある質問。
所属していません StackOverflow