Chciałbym propagować kontekst żądania bezpośrednio w systemie współpracujących aktorów.Przekazywanie kontekstu żądania bezwarunkowo w systemie aktorów
Aby uprościć i przedstawić sytuację, mój system ma wielu aktorów, a komunikaty przekazywane do tych aktorów muszą zawierać ten obiekt RequestContext.
ActorA odbiera komunikaty typu MessageA ActorB odbiera komunikaty typu MessageB
gdy ActorA musi wysłać wiadomość do ActorB, w ramach rozpatrywania MessageA, wykonuje logikę biznesową, a następnie konstruuje MessageB od wyniki logiki, jak również RequestContext dostępnych w MessageA a następnie wysyła go do ActorB
def handle(ma:MessageA) {
val intermediateResult = businessLogic(ma)
actorB ! MessageB(intermediateResult, ma.requestContext)
}
Mamy zabił wiadomości mają być przetwarzane i wyraźnie przechodząc wokół RequestContext jest kłopotliwe.
Próbuję twórczych sposobów korzystania z funkcji implicite Scala, aby uniknąć jawnego wstrzyknięcia RequestContext osadzonego w wiadomości przychodzącej do wiadomości wychodzącej.
Komunikaty są klasami przypadków (i muszą być). Czytałem o regułach implicits, ale wprowadzenie atrybutów obiektu do bieżącego domyślnego zakresu wydaje się daleko idące.
To, jestem pewien, powinno być powszechnym wymogiem. Jakieś sugestie?
Dzięki.
Dzięki za odpowiedź. Poważnie zastanawiałem się nad tym podejściem, ale zrezygnowałem z myślenia, że przekazanie tego parametru jest znacznie bardziej czytelne i mniej szczegółowe niż dodanie wszystkich importów i implicite w celu korzystania z funkcji - nie sądzisz? – vishr
Jeśli to jest problem, odfiltrowałbym procesor wiadomości, który jest MessageA => MessageB i po prostu wywołaj go w ciele aktora. To również zwiększyłoby testowalność – Edmondo1984