このAkka と Cassandra のチュートリアルでは、 Cassandraに書き込み、同じデータを読み戻すことを期待する統合テストにより、書き込みと読み取りの間に 1 秒の遅延が挿入されます。遅延により、書き込み要求がネットワーク経由で送信され、サーバーで処理される時間が確保されます。これが必要なのは、アプリケーションがsession.executeAsync
Cassandra に要求を送信するために呼び出し、Cassandra からの応答を処理せずに続行するためです。
class TweetWriterActor(cluster: Cluster) extends Actor {
val session = cluster.connect(Keyspaces.akkaCassandra)
val preparedStatement = session.prepare("INSERT INTO tweets(key, user_user, text, createdat) VALUES (?, ?, ?, ?);")
def saveTweet(tweet: Tweet): Unit =
session.executeAsync(preparedStatement.bind(tweet.id.id, tweet.user.user, tweet.text.text, tweet.createdAt))
def receive: Receive = {
case tweets: List[Tweet] => tweets.foreach(saveTweet)
case tweet: Tweet => saveTweet(tweet)
}
}
通常、書き込み要求の完了には 1 秒よりもはるかに短い時間がかかるため、代わりに、読み取りを試行する前に書き込みが完了したという通知を受け取ると、テストをより速く実行できます。ノンブロッキング I/O 操作に固執しながら、これを行うためにコードをどのように変更しますか?