Je suis assez novice en matière d'Akka et je n'ai pas trouvé la réponse dans le manuel de référence.
Supposons que nous ayons des acteurs distants répartis dans un cluster de 3 machines (A, B, C), où un acteur vit sur chaque machine et les autres ont un actorRef vers 2 autres, c'est-à-dire :
Machine A:
A (real actor)
-> B (ref)
-> C (ref)
Machine B:
-> A (ref)
B (real actor)
-> C (ref)
Machine C:
-> A (ref)
-> B (ref)
C (real actor)
L'acteur A exécute le code suivant :
bRef ! msg1
bRef ! msg2
L'acteur B exécute le code suivant dans le gestionnaire de messages :
case msg1 =>
cRef ! msg3
aRef ! msg4
L'acteur C exécute le code suivant dans le gestionnaire de messages :
case msg3 =>
aRef ! msg5
Puis-je émettre les hypothèses suivantes (le cas échéant) ?
-
l'acteur B reçoit le message 1 avant de recevoir le message 2
-
l'acteur A reçoit msg5 avant de recevoir msg4
Et la question complémentaire qui permet probablement de comprendre ce qui précède : Le message envoyé par l'opérateur ! via le réseau est-il vraiment asynchrone ou attend-il que la boîte aux lettres réceptrice le reçoive ? En d'autres termes, la ligne
bRef ! msg1
bloque jusqu'à ce que l'acteur B reçoive le message dans sa boîte aux lettres ou lance-t-il le thread qui s'occupe de l'envoi et poursuit-il l'exécution ?
bRef ! msg2
avant même de savoir que l'acteur B a reçu le message 1 ?