2016-07-26 9 views
1

私のアプリケーションでは、さまざまなユーザーイベントに応答して電子メールを送信するサービスがあります。メールの送信が何らかの理由で失敗し、メッセージを削除して再試行しようとしないという問題が続いています。この障害モデルには、JVMがシャットダウンされることが含まれます。ルールは重複した電子メールが発生しないようにすることであり、電子メールの送信に失敗することは非常に望ましくないが許容されるということです。基本的には重複の恐れなしに再試行できるはずです。未処理のメッセージのAkka永続性

上記の問題を解決するためにAkko-Persistenceが現れますが、すべてのメッセージを保存してリカバリするためにそれらのサブセットを再生するようになっているようです。

必要な動作は、アクターが回復するときに未処理のメッセージ(障害が発生したときに処理されるメッセージを含む)が再生されることです。さらに、システムがバウンスすると、保留中の電子メールが送信されます。

私が見逃してしまったAkkaのドキュメントのいくつかのセクションがありますか?上記を達成する簡単な方法はありますか?我々はこのためにアッカ2.4.8を評価しているレコードの

http://doc.akka.io/docs/akka/2.4.8/

答えて

2

正確に配達一度は保証することは不可能かもしれないが、あなたはおそらく使用例この種のために十分近づけることができます。

送信が失敗し、あなたはそれはあなたがこのように行うことができます成功したことを特定の承認として見ることができる何かするときには、例外またはコールバックのいくつかの種類を取得する場合:

は、一意のIDを郵送し、永続的に保つそれぞれを与えます飛行中のメールで構成されている俳優の状態は、あなたがそれを送信しようとしているという事実を維持した後でのみメールを送信し、メールが送信されたことが確認されたときに飛行機から取り除く。

イベントログには、MailSentMailSendConfirmedという2つのドメインイベントが発生します。再起動後、アクターの再生が完了すると、機内であっても確認されていないメールを再送信できます。

もちろん、電子メールの送信に失敗する可能性のあるすべてのものを取りたい場合は、電子メールアドレスのスペルが間違っているためにメールを受信して​​送信するのがはるかに難しくなります。

関連する問題