2014-07-02 9 views
6

Używam urządzeń do zdalnego i serializowania firmy Akka i chcę zrozumieć kilka rzeczy, aby zacząć. Czytałem nad dokumentacją na serializacji tutaj:Scala Akka i bufory protokołów

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

Zgodnie z dokumentacją, wydaje się, że byłoby to wystarczy po prostu dostarczyć te rzeczy w moim application.conf pod:

akka.actor { 

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

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

I załóżmy, że mam klasy sprawy w ramach tego pakietu, takie jak:

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

a potem w moich aktorów, mogę zrobić coś simly l to:

class ClientActor extends Actor { 

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

Czy taka konfiguracja byłaby wystarczająca, czy też musiałbym zrobić coś więcej? Szukałem na serializatora zewnętrznego wymienionego w dokumentacji tutaj: https://github.com/romix/akka-protostuff-serialization

To wygląda naprawdę obiecująco, ale szukałem czegoś standardzie, które wychodzi z pudełka od Akka.

Zajmuję się także testowaniem kompatybilności wersji wiadomości. Powiedzmy Aktor rozmowy do Aktor B z MessageX

MessageX początkowo może zawierać pola, na przykład w ten sposób:

a: String, b: String, c: String 

Teraz powiedzmy Aktor B uaktualnia swoją wersję wiadomość X , pozwala to nazwać Wiadomość X +1

wiadomość X +1 zawiera teraz kolejne pole, tak jak poniżej:

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

Ale aktora wciąż wysłaniem starszą wersję wiadomości, po prostu wiadomość X ... Czy Aktor B nadal wiem, jak deserializować stare wiadomości?

Dzięki za pomoc.

Odpowiedz

4

Serializator Protobuf może serializować tylko komunikaty Protobuf. Aby wszystko działało, jak chcesz, musisz uczynić z MyMessage wiadomość protobuf.

+2

Czy możesz podać więcej szczegółów: 'jak zrobić MyMessage wiadomość protobuf'? Lub dowolny przydatny link? –

+1

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

3

Tylko dodatkowe informacje na temat problemów związanych z wersjami;

Protobuf może serializować/deserializować różne wersje tych samych typów wiadomości. Musisz zachować indeksy już istniejących pól i dodać dodatkowe nowe odpowiednio w deskryptorze pliku proto.

Powiązane problemy