2011-11-15 19 views

risposta

16

UntypedActor è semplicemente il nome per l'attore, ma come l'API Java.

Sono molto sorpreso che la documentazione non è sufficiente:

Java:

Scala:

La differenza è che TypedActors hanno un'interfaccia statica, e le invocazioni dei metodi su tale interfaccia si trasforma in messaggio invia. UntypedActors può ricevere qualsiasi messaggio.

Spero che questo aiuti.

Cheers, √

+0

Perché la gente di solito preferisce usare l'attore non tipizzato rispetto a quelli digitati? Quelli tipizzati sembrano rendere il codice più leggibile - meno "instanceof"/"caso" - coinvolti. Più orientato agli oggetti come. Più digitati come Java e lingue scala sono. – ses

+0

La mia opinione: usando un attore non tipizzato devi filtrare i messaggi per attore. Usando l'attore dattilografato devi legare solo il messaggio esatto. – alerya

+0

attori digitati inducono ad alta accoppiamento e che non permette diventato/non-venuto (che è il modo originale e puro funzionali di lavorare con lo stato interno attori), maggiori informazioni - http://letitcrash.com/post/19074284309/when-to -use-typedactors – dk14

4
Actors (Untyped) 

Per gli attori (Scala) per ricevere messaggi, essi devono mixin il tratto dei consumatori. Ad esempio, la seguente classe di attori (Consumer1) implementa il metodo endpointUri, che è dichiarato nel tratto Consumer, al fine di ricevere messaggi dal file: data/input/attore Camel endpoint. Gli attori Untyped (Java) devono estendere la classe astratta UntypedConsumerActor e implementare i metodi getEndpointUri() e onReceive (Object).

Actors (Typed) 

Gli attori digitati possono anche ricevere messaggi dagli endpoint Camel. A differenza degli attori (non tipizzati), che implementano solo un singolo metodo di ricezione o onReceive, un attore tipizzato può definire diversi metodi (elaborazione di messaggi), ognuno dei quali può ricevere messaggi da un diverso endpoint Camel. Affinché un metodo typed actor venga esposto come endpoint Camel, è necessario annotarlo con l'annotazione @consume. Ad esempio, il seguente attore consumatore digitato definisce due metodi, foo e bar.

Reference

+0

Mithun, la parte che riguarda gli attori che hanno bisogno di mixin il tratto dei consumatori, al fine di ricevere i messaggi è di circa * Camel * messaggi, giusto? Naturalmente Akka Actor può ricevere normali messaggi Akka, con o senza Consumer. – AmigoNico

+0

@AmigoNico: Giusto !! –

1

attori non tipizzate rispondono ai messaggi inviati, mentre gli attori tipizzati rispondere alle chiamate di metodo (i valori dei parametri sono i messaggi).

Il modello di attore digitato viene utilizzato per definire contratti rigidi per gli attori che possono rispondere solo al set predefinito di messaggi. In questo caso, ogni messaggio non deve essere incapsulato come un oggetto; gli attori tipizzati ci consentono di definire metodi separati che accettano più input come definito dal contratto. Nel linguaggio di Java, gli attori tipizzati forniscono l'interfaccia Java nel mondo orientato agli oggetti. [1]

[1] Akka Essentials

0

Akka attori non tipizzati "non comporre" e "non sono utilmente digitato".

Questo sconfigge la stessa ragione per cui usiamo Scala: è il potere di programmazione funzionale. Vedere http://noelwelsh.com/programming/2013/03/04/why-i-dont-like-akka-actors/ per approfondire questa mentalità.

Inoltre, vedere i tentativi di migliorare questo a Scala per abbinare il modo Haskell.

http://letitcrash.com/post/40198993865/makkros-first-step-towards-typed-channels http://letitcrash.com/post/45188487245/the-second-step-akka-typed-channels

sembra essere ancora in fase sperimentale in Akka o addirittura caduto - non è chiaro.

Questa idea di canali digitati fa un sacco di senso, perché si verificano problemi simili quando si cerca di costruire il tipo controllato dati (Analytics) condutture.

Akka tipizzati sembra essere una grande evoluzione per un modello di programmazione più sicura: https://opencredo.com/akka-typed/

Problemi correlati