Celem jest zaimplementowanie bardzo prostej pamięci podręcznej dla aktora, który musi wywoływać usługę zewnętrzną (lub jakąś kosztowną, ale wysoce buforowaną operację) bez użycia stanu zmiennego.Czy to bezpieczne, aby aktor Akka stał się metodą zamykania niezmiennego stanu?
class A extends Actor{
def receive = {
case GetCommand =>
val response = callExternalService()
context.become(receiveWithCache(response))
context.system.scheduler.schedule(1 day, 1 day, self, InvalidateCache)
sender ! response
}
def receiveWithCache(cachedResponse:R): PartialFunction[Any,Unit] = {
case GetCommand => sender ! cachedResponse
case InvalidateCache => context.unbecome
}
}
wiem, że istnieją bardziej zaawansowane sposoby realizacji tej, wśród których pełnoprawną CacheSystem, które można znaleźć na stronach wzory Akka, ale w niektórych przypadkach, że naprawdę nie jest wymagane.
Co więcej, warto wiedzieć, czy odpowiedź na to pytanie jest bezpieczna.
Nie mogę się doczekać odpowiedzi, ponieważ jest to bardzo eleganckie. – yan
Dlaczego zamknięcie stanu niezmiennego nie byłoby bezpieczne? –
1) Nie sądzę, aby unikanie (lokalnego) stanu za wszelką cenę było rozsądne - proszę oświecić mnie, jeśli czegoś brakuje - i 2) nie byłoby ładniej używać anonimowej (częściowej) funkcji z 'kontekstem. stać się "zamiast metody? –