2017-12-08 2 views
0

私はCassandraとLagomで最初のEntityを設定しようとしています。Lagom persistentEntityRegistry.registerは機能しません。

ラゴムがカッサンドラにエンティティを保存する方法について質問していますか?

例えば、これは私のUserServiceImplクラスです:

public class UserServiceImpl implements UserService { 

    private final PersistentEntityRegistry persistentEntityRegistry; 

    @Inject 
    public UserServiceImpl(PersistentEntityRegistry persistentEntityRegistry) { 
     this.persistentEntityRegistry = persistentEntityRegistry; 
     persistentEntityRegistry.register(UserEntity.class); 
    } 

    @Override 
    public ServiceCall<NotUsed, String> getUserInfo(String id) { 
     return (request) -> { 
      // Look up the user entity for the given ID. 
      PersistentEntityRef<UserCommand> ref = persistentEntityRegistry.refFor(UserEntity.class, id); 
      // Ask the entity the Hello command. 
      return ref.ask(new UserCommand.Hello(id, Optional.empty())); 
     }; 
    } 
} 

だから、実行して:

persistentEntityRegistry.register(UserEntity.class)。

私はCassandraにユーザーテーブルを用意する必要がありますか?

enter image description here

私は私のLagomプロジェクトを開始する前に、テーブルのユーザーを作成する必要があり、私は理解できないか、我々は唯一のイベントを保存:私は持っているので?それはオブジェクトリレーショナルマッピングまたは類似したものに基づいていないので、

すべてのヘルプは、

答えて

2

Lagomはエンティティのテーブルを必要としないでください。その永続層はEvent Sourcingの原則に基づいています。

メッセージテーブルにはエンティティによって発行されたイベントが含まれ、その状態はメモリに戻すたびに回復されます。

基本的に、イベントはjson形式でメッセージテーブルに保存されます。

また、スナップショットという概念もあります。エンティティの状態をスナップショットとして保存することもできます(jsonも使用します)。これは100回のイベントが発生するたびに発生し、毎回イベントを最初から再生しないようにするための小さな最適化です。

私はすぐにメカニズム全体について説明しようとします。

コマンドがエンティティに送信され、イベントが持続されます(コマンドハンドラで発生します)。イベントは永続化された後、エンティティに適用されて変更されます(イベントハンドラで発生します)。

サービスを再起動し、同じエンティティに新しいコマンドを送信します。その時点でエンティティはメモリにはないので、Lagomはメモリに格納しますが、新しいコマンドを処理する前に、システムが停止したときの状態に戻すために、このエンティティのイベント履歴を再生します。

その後、コマンドが適用され、新しいイベントが保持されます。

エンティティのスナップショットが保存され、次に同じエンティティを再生する必要があるときは、最初にスナップショットをロードしてから、スナップショット後に発生したイベントを適用します。したがって、その場合、イベント履歴全体を再生する必要はありません。

+0

ありがとうございました、レナートと私は遅くまで申し訳ありません。私はそれを理解しており、今はもっと明らかです。しかし、同時に、永続的な読み取り側を実装することでエンティティを操作できます。したがって、Event SourcingとCQRSをお勧めする場合は、いつReadサイドを使うべきですか?それについて何かお勧めしますか? – Imen

+1

アイデアは、読み取り側のエンティティを操作することではありません。読み取り側は、イベントから派生することができるあらゆる種類の表現やビューを生成するためのものです。 – Renato

+0

ありがとうございます:) – Imen

関連する問題