var定義なしで定期的に更新された値を実装しようとしています。定義方法スカラーでvar定義なしの定期的な更新値
たとえば、Webサーバーがあり、ユーザーの要求を処理するために他のサーバーのヘルスチェックを行う必要があるとします。ヘルスチェックの結果は、すべてのユーザー要求アクションによって参照されます。 新しいリクエストが処理されるたびにヘルスチェックを実行すると膨大な費用がかかります。代わりに、たいてい5分ごとにヘルスチェック結果の値を更新したいと思います。
これを実装するのにvar
を使用すると簡単です。
private var result = false
private var lastUpdated = 0L
private val INTERVAL = 1000L * 60 * 5
def helthCheckResult = {
System.currentTimeMillis() match {
case currentTime if currentTime > lastUpdated + INTERVAL =>
result = !result // actual code should call heathcheck impl
lastUpdated = currentTime
result
case _ =>
result
}
}
やアッカ
class HeathCheckActor(implicit system: ActorSystem) extends Actor {
private var result = false
system.scheduler.schedule(0 seconds,5 minutes,self,"update")
def receive = {
case "update" if sender == self =>
result = !result // actual code should call heathcheck impl
case "get" =>
sender ! result
}
}
で、彼らは状態を保持するために結果var
を使用しています。私が達成したいのは、var
なしでこれを実装することです。
これを行う方法はありますか?
あらゆる種類の情報/ヒントが評価されます。
編集
は、私が達成したいものを聞いて少し悪い例でした。 たとえば、result
がBoolean
のような単純な最終状態ではなく、Int
の場合result
は、任意の値のIntクラウドを表すことができます。 別の言い方をすれば、Akka FSMのようなものは使用できません。
ありがとうございます。あなたは値を保持する場所であるコードを提供していただけますか?私はあなたのコードが単に 'var'を別の場所に移動していると感じています。 – suish