2015-06-01 33 views
5

Sto cercando di capire quando e dove utilizzare i diversi built-in Akka mailboxes e quando è opportuno eseguire il rollover. Tuttavia, da nessuna parte in quella pagina viene spiegato cosa sia effettivamente una "casella postale limitata" "o come si comporta diversamente da una casella di posta illimitata . Inoltre, quella pagina classifica le caselle di posta come "blocco" vs "non bloccante". E mentre ho una forte idea di cosa intendono con questo (un messaggio può essere inviato a una casella di posta elettronica a meno che la cassetta postale non sia stata prima svuotata) Non sono sicuro al 100% di averlo capito. Quindi, visto che non ho idea di cosa significano i documenti quando categorizzano una casella di posta come delimitata o bloccata, è difficile per me dire quando dovrei usare ogni tipo.Quando utilizzare vari tipi di cassette postali Akka

Inoltre, sembra che sia il comportamento predefinito di Akka eliminare la cassetta postale di un attore se quell'attore viene riavviato. Mi piacerebbe evitare questo, ma non sono sicuro se la soluzione è quella di utilizzare uno di questi tipi di caselle di posta (non menzionate la persistenza del messaggio è menzionata in questa pagina) o in qualche modo utilizzare attori persistenti per realizzare tale assenza di perdite.

risposta

6

Innanzitutto, se un attore si arresta in modo anomalo e viene riavviato, si perde solo il messaggio corrente che era in elaborazione e non l'intera cassetta postale.

Una cassetta postale limitata ha un limite al numero di messaggi che può essere messo in coda prima che inizi a bloccare il mittente e non consenta l'elemento se la coda non scende mentre il mittente sta tentando di inserire un elemento. Se hai dubbi sulla memoria e puoi gestire potenziali perdite di messaggi, potresti volere qualcosa di simile. Una casella di posta illimitata non ha limiti di capacità, quindi potrebbe verificarsi problemi di memoria in caso di allagamento.

Se è limitato o no influirà o meno sui blocchi. Il blocco non è generalmente ottimo per le prestazioni e dovrebbe essere evitato se la situazione non richiede una casella di posta limitata. Ecco perché la casella di posta predefinita è illimitata; produrrà prestazioni molto migliori di una controparte limitata.

La casella postale illimitata del singolo consumatore sarà probabilmente la più veloce perché è ottimizzata per consentire a un solo consumatore di eliminare la coda. Ciò significa che non è possibile utilizzare un dispatcher che consente a un'istanza di attore di rubare elementi da un'altra cassetta postale di istanze di attori (distribuzione/sottrazione di lavoro), ma se non ti interessa, allora questa cassetta postale potrebbe essere la soluzione migliore per le prestazioni.

Le cassette postali basate su priorità consentono di fornire codice che consente al posizionamento all'interno della coda di variare in base ad alcuni attributi sui messaggi stessi. Questo ti consente di definire tu stesso la priorità dei messaggi e questo sposterà gli articoli con priorità più alta nella parte anteriore della coda, indipendentemente dalle normali regole FIFO.