2015-07-01 24 views
5

Buduję serwis internetowy przy użyciu Spray.io, który znajduje się na rdzeniu aplikacji zbudowanej za pomocą Akki.Przekazywanie zmiennych w aplikacji Spray.io

Po otrzymaniu wniosku przetwarzany jest przez trasę rozpylania, która z kolei wysyła (za pomocą polecenia) żądanie do aktora, który przetwarza żądanie i zwraca odpowiedź, używając kontekstu żądania.

Uwierzytelniałem użytkownika w ramach początkowej trasy, a to uwierzytelnienie/autoryzacja zwraca obiekt użytkownika zawierający dane użytkownika.

Potrzebuję mieć dostęp do tego obiektu użytkownika w głównej aplikacji Akka w różnych punktach. Nie chcę podawać tego jako parametru dla każdej wiadomości (klasy przypadku) wysłanej do aktora, ponieważ wydaje się to po prostu niechlujne, ponieważ czasami przekazywałbym ją aktorowi, aby mógł zostać przekazany innemu . Czy istnieje lepszy/zalecany sposób udostępnienia tego obiektu innym podmiotom w systemie? Czy może być dołączony do kontekstu żądania lub czy jest to zła praktyka?

Dzięki

+0

Czy akka nadaje to, czego szukasz? http://doc.akka.io/docs/akka/snapshot/scala/routing.html#Broadcast_Messages –

+1

@ThiagoPereira bardziej chodzi o przekazywanie dodatkowych metadanych _together_ z wiadomością – sap1ens

+0

@ThiagoPereira - Może działać, ale nie czuje się jak w odpowiedni sposób - transmisja do wszystkich ... Czy przesłana przez Ciebie wiadomość może być zmienną taką jak klasa przypadku? – fatlog

Odpowiedz

2

Jeśli próbujesz zrobić, to unikać boilerplate posiadania przekazać informacje uwierzytelniania podczas tworzenia instancji klasy przypadek, można dodać listę argumentów niejawny do nich:

scala> implicit val i = 1 
i: Int = 1 

scala> case class X(s: String)(implicit val y: Int) 
defined class X 

scala> val x = X("foo") 
x: X = X(foo) 

scala> x.y 
res4: Int = 1 

Nadal przesyłasz informacje uwierzytelniające przy każdym komunikacie i nie można używać dopasowywania wzorca na drugiej liście argumentów, ale w zależności od tego, co próbujesz osiągnąć, może zadziałać.