2015-07-01 17 views
5

Sto costruendo un servizio Web utilizzando Spray.io che si trova in cima a un'applicazione di base creata con Akka.Passaggio di variabili in un'applicazione Spray.io

Quando si riceve una richiesta, viene elaborata da una route di spruzzatura che a sua volta invierà (utilizzando tell) la richiesta a un attore che elabora la richiesta e restituisce la risposta utilizzando il contesto della richiesta.

Autentico l'utente nel percorso iniziale e questa autenticazione/autorizzazione restituisce un oggetto utente contenente dati sull'utente.

Devo essere in grado di accedere a questo oggetto utente all'interno dell'applicazione Akka di base in vari punti. Non voglio doverlo passare come parametro su ogni messaggio (classe di caso) inviato a un attore in quanto ciò sembra solo disordinato, visto che a volte lo passerei a un attore solo perché possa essere passato a un altro . Esiste un modo migliore/consigliato per rendere questo oggetto disponibile ad altri attori nel sistema? Può essere allegato al contesto della richiesta stessa o è una cattiva pratica?

Grazie

+0

Is akka trasmette quello che stai cercando? http://doc.akka.io/docs/akka/snapshot/scala/routing.html#Broadcast_Messages –

+1

@ThiagoPereira si tratta di trasmettere ulteriori metadati _together_ con il messaggio – sap1ens

+0

@ThiagoPereira - Potrebbe funzionare ma non sembra proprio nel modo giusto - trasmettendo a tutti ... Il messaggio che trasmetti è una variabile come una classe di casi ?? – fatlog

risposta

2

Se state cercando di fare è evitare il boilerplate di dover passare le informazioni di autenticazione quando si creano le istanze caso di classe, si potrebbe aggiungere una lista di argomenti implicita loro:

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 

si sta ancora passando le informazioni di autenticazione con ogni messaggio e non è possibile utilizzare la corrispondenza del modello nella seconda lista di argomenti, ma a seconda di ciò che si sta tentando di ottenere potrebbe funzionare.