在本 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 操作的同时,您将如何更改代码来执行此操作?