2011-10-10 3 views
5

何らかのイベントによって作成されたサガをして、数時間待ってから、何も起こらなければ何らかのコマンドを送ります。イベントソーシングを使用した時間ベースのサガ

ここで、この佐賀がすべてメモリに入っていて、アプリ/サーバーを再起動しなければならないと、佐賀はアンロードされて再び見られませんでした。

システムがオンラインに戻ると、このSagaを高速化するためにEvent Sourcingを使用しますか?

もしそうなら、システムの起動時に再生することができる「アクティブなサガ」を備えた別個のイベントストアが必要になり、サガをスピードアップすることができます。これまでのところ私にとっては良いようですが、どのようにタイムアウトを実装するのですか?

私はリプレイ時にタイムアウトを "偽造"する方法が必要です。サガに入るイベントに応じて、いくつかの後続のタイムアウトがあるかもしれません。

答えて

6

この機能を実現する最善の方法は、特定の時点でメッセージを返すことができる別のエンドポイントです。たとえば、あなたのサーガはこの「タイムアウトマネージャー」にメッセージを送り、1時間か1日か1年間で目覚めさせます。その時、メッセージはあなたに返されます。理想的には、このメッセージには、行動を起こすビジネス上の意味があります。

これは、顧客がサインアップしてから7日以内にアカウントを確認しなかった場合、電子メールで通知するような顧客のサインアップのようなものです。 「タイムアウトメッセージ」は事実上:RemindUserToConfirmAccountMessageである。このメッセージが7日後にサガによって返信されると、そのメッセージを処理する必要があり、顧客の電子メールを送信する必要があるかどうかを判断することになります。しかし、ユーザーが既に自分のアカウントを確認している場合は、何もしないでメッセージを破棄することができます。

+0

私は7日間生きる佐賀をどうすればいいですか?私はそれがサービスの再起動の場合には永続化されなければならないと確信しています。 –

+1

@MauroDestro Event Sourcingを使用しているときにあなたのサガを記憶しておく必要はありません。あなたがイベントを処理する前に再生できるエンティティとして、サガを考えてみましょう。コマンドを処理する前に集計を再生する方法と比較してください。時間切れを処理するためのJonathanのアプローチを使用することで、「時間」を再生することも可能になります。 –

関連する問題