2014-07-02 18 views
6

Mi sto cazzando con i servizi remoti e di serializzazione di Akka e voglio capire alcune cose per iniziare. Ho letto sopra la documentazione sul serializzazione qui:Scala Akka e buffer di protocollo

http://doc.akka.io/docs/akka/2.3.4/scala/serialization.html

Secondo la documentazione, sembra che basterebbe solo la fornitura di queste cose nella mia application.conf, sotto:

akka.actor { 

serializers { 
    java = "akka.serialization.JavaSerializer" 
    proto = "akka.remote.serialization.ProtobufSerializer" 
} 

serialization-bindings { 
    "com.mycompany.messages.MyMessage" = proto 
} 
} 

E supponiamo ho una classe caso in quel pacchetto, come ad esempio:

package com.mycompany.messages; 
case class MyMessage(name: String, year: Int) 

E poi nei miei attori, posso fare qualcosa simly l ike this:

class ClientActor extends Actor { 

    def receive = { 
     case x: MyMessage => ... 
    } 
} 

Questa configurazione sarebbe sufficiente o dovrei fare qualcosa di più? Ho guardato un serializzatore esterna citato dalla documentazione qui: https://github.com/romix/akka-protostuff-serialization

Questo sembra davvero promettente, ma ero alla ricerca di qualcosa di standard che viene fuori dalla scatola da Akka.

Sto anche esaminando la compatibilità della versione del messaggio. Diciamo Attore Un trattative per Attore B con MessageX

MessageX inizialmente potrebbe contenere campi come questo:

a: String, b: String, c: String 

Ora diciamo Attore B aggiorna la sua versione di messaggio X , chiamiamolo Messaggio X +1

messaggio X +1 comprende ora un altro campo, in questo modo:

a: String, b: String, c: String, d: String 

Ma Attore Un sta ancora inviando la versione precedente del messaggio, semplicemente messaggio X ... sarebbe Attore B sa ancora come deserializzare il vecchio messaggio?

Grazie per l'aiuto.

risposta

4

Il serializzatore Protobuf può serializzare solo i messaggi Protobuf. Quindi, affinché le cose funzionino come vuoi, devi rendere MyMessage un messaggio protobuf.

+2

Puoi fornire maggiori dettagli: 'come rendere MyMessage un messaggio protobuf'? O qualche link utile? –

+1

https://developers.google.com/protocol-buffers/docs/overview?hl=it –

3

Solo ulteriori informazioni sui problemi di controllo delle versioni;

Protobuf può serializzare/deserializzare diverse versioni degli stessi tipi di messaggi. Devi sostenere gli indici dei campi già presenti e aggiungere di conseguenza quelli nuovi, nel descrittore del file proto.