2016-06-27 4 views
0

私のアプリケーションでは、作成、編集、削除といった3種類のイベントを管理する必要があります。 これらのイベントを1つのReadSideProcessorで管理することはできますか? prepareメソッドでステートメントを準備する特定の順序はありますか?ReadSideProcessorは複数のイベントを管理できますか?

答えて

0

はい、ReadSideProcessor.defineEventHandlerは、複数のイベントを保持できるBuilderを受け入れます。

すべてのイベントは一意であるため、それらを定義する順序は重要ではありません。 は、以下

@Override 
public EventHandlers defineEventHandlers(EventHandlersBuilder builder) { 
    // when Account created, insert account table; 
    builder.setEventHandler(TransactionEvent.AccountCreatedEvent.class, (ev, offset) -> { 
     System.out.println("offset ->" + offset); 
     BoundStatement st = writeAccount.bind() 
             .setString("account_id", ev.id) 
             .setString("name", ev.name); 


     BoundStatement stOffset = writeOffset.bind(offset); 

     return completedStatements(Arrays.asList(st, stOffset)); 
    }); 
    // when Deposit, insert history and update balance 
    builder.setEventHandler(TransactionEvent.MoneyDepositedEvent.class, (ev, offset) -> { 
     System.out.println("offset ->" + offset); 
     BoundStatement historyInsert = writeHistory.bind() 
                .setString("account_id", ev.id) 
                .setLong("amount", ev.amount) 
                .setString("type", "DEPOSIT") 
                .setTimestamp("at", toTimestamp(offset)); 

     BoundStatement accountUpdate = updateAccount.bind() 
                .setString("account_id", ev.id) 
                .setLong("balance", ev.balance + ev.amount); 

     return completedStatements(Arrays.asList(historyInsert, accountUpdate, writeOffset.bind(offset))); 
    }); 

    // when Withdrawal, insert history and update balance 
    builder.setEventHandler(TransactionEvent.MoneyWithdrawnEvent.class, (ev, offset) -> { 
     System.out.println("offset ->" + offset); 
     BoundStatement historyInsert = writeHistory.bind() 
                .setString("account_id", ev.id) 
                .setLong("amount", ev.amount) 
                .setString("type", "WITHDRAWAL") 
                .setTimestamp("at", toTimestamp(offset)); 

     BoundStatement accountUpdate = updateAccount.bind() 
                .setString("account_id", ev.id) 
                .setLong("balance", ev.balance - ev.amount); 

     return completedStatements(Arrays.asList(historyInsert, accountUpdate, writeOffset.bind(offset))); 
    }); 
    return builder.build(); 
} 
参照ハッシュマップ(イベント、ビュー・ストア・ロジック)

約だと思います

関連する問題