java - Akka actor won't reconnect to remote Actor after restart -


so have 2 dockers run 2 akka systems.

container runs system a

container b runs system b

when system loads, connects system b with:

await.result(system.actorselection(actorpath).resolveone(new timeout(resolve_duration)), resolve_duration) 

all here, connection success , systems exchange messages.

then restart container b

docker restart container-b 

on system a, added watch on system b if terminated. when restart system b, akka terminated message in system - good. start reconnection loop each 5 seconds , try reconnect system b again with:

await.result(system.actorselection(actorpath).resolveone(new timeout(resolve_duration)), resolve_duration) 

but now, exceptions actornotfound.

    [error] [21/08/2017 08:11:49.851] [exchange-akka.actor.default-dispatcher-14] [akka.remote.endpointwriter] associationerror [akka.tcp://system@systema:2555] -> [akka.tcp://system@systemb:2550]: error [shut down address: akka.tcp://system@systemb:2550] [     akka.remote.shutdownassociation: shut down address: akka.tcp://system@systemb:2550     caused by: akka.remote.transport.transport$invalidassociationexception: remote system terminated association because shutting down.     ]      [error] [21/08/2017 08:11:54.850] [exchange-akka.actor.default-dispatcher-14] [c.m.e.c.actors.watchdog.watchdog] failed reconnect path [akka.tcp://system@systemb:2550/user/myactor]     akka.actor.actornotfound: actor not found for: actorselection[anchor(akka.tcp://system@systemb:2550/), path(/user/myactor)]         @ akka.actor.actorselection$$anonfun$resolveone$1.apply(actorselection.scala:65) ~[akka-actor_2.11-2.4.0.jar:na]         @ akka.actor.actorselection$$anonfun$resolveone$1.apply(actorselection.scala:63) ~[akka-actor_2.11-2.4.0.jar:na]         @ scala.concurrent.impl.callbackrunnable.run(promise.scala:32) ~[scala-library-2.11.7.jar:na]         @ akka.dispatch.batchingexecutor$abstractbatch.processbatch(batchingexecutor.scala:55) ~[akka-actor_2.11-2.4.0.jar:na]         @ akka.dispatch.batchingexecutor$batch.run(batchingexecutor.scala:73) ~[akka-actor_2.11-2.4.0.jar:na]         @ akka.dispatch.executioncontexts$samethreadexecutioncontext$.unbatchedexecute(future.scala:74) ~[akka-actor_2.11-2.4.0.jar:na]         @ akka.dispatch.batchingexecutor$class.execute(batchingexecutor.scala:120) ~[akka-actor_2.11-2.4.0.jar:na]         @ akka.dispatch.executioncontexts$samethreadexecutioncontext$.execute(future.scala:73) ~[akka-actor_2.11-2.4.0.jar:na]         @ scala.concurrent.impl.callbackrunnable.executewithvalue(promise.scala:40) ~[scala-library-2.11.7.jar:na]         @ scala.concurrent.impl.promise$defaultpromise.trycomplete(promise.scala:248) ~[scala-library-2.11.7.jar:na]         @ akka.pattern.promiseactorref.$bang(asksupport.scala:345) ~[akka-actor_2.11-2.4.0.jar:na]         @ akka.actor.emptylocalactorref.specialhandle(actorref.scala:553) ~[akka-actor_2.11-2.4.0.jar:na]         @ akka.actor.deadlettera  ctorref.specialhandle(actorref.scala:589) ~[akka-actor_2.11-2.4.0.jar:na]         @ akka.actor.deadletteractorref.$bang(actorref.scala:579) ~[akka-actor_2.11-2.4.0.jar:na]         @ akka.remote.remoteactorrefprovider$remotedeadletteractorref.$bang(remoteactorrefprovider.scala:85) ~[akka-remote_2.11-2.4.0.jar:na]         @ akka.remote.endpointmanager$$anonfun$2.applyorelse(remoting.scala:614) ~[akka-remote_2.11-2.4.0.jar:na]         @ akka.actor.actor$class.aroundreceive(actor.scala:480) ~[akka-actor_2.11-2.4.0.jar:na]         @ akka.remote.endpointmanager.aroundreceive(remoting.scala:400) ~[akka-remote_2.11-2.4.0.jar:na]         @ akka.actor.actorcell.receivemessage(actorcell.scala:525) [akka-actor_2.11-2.4.0.jar:na]         @ akka.actor.actorcell.invoke(actorcell.scala:494) [akka-actor_2.11-2.4.0.jar:na]         @ akka.dispatch.mailbox.processmailbox(mailbox.scala:257) [akka-actor_2.11-2.4.0.jar:na]         @ akka.dispatch.mailbox.run(mailbox.scala:224) [akka-actor_2.11-2.4.0.jar:na]         @ akka.dispatch.mailbox.exec(mailbox.scala:234) [akka-actor_2.11-2.4.0.jar:na]         @ scala.concurrent.forkjoin.forkjointask.doexec(forkjointask.java:260) [scala-library-2.11.7.jar:na]         @  scala.concurrent.forkjoin.forkjoinpool$workqueue.runtask(forkjoinpool.java:1339) [scala-library-2.11.7.jar:na]     @ scala.concurrent.forkjoin.forkjoinpool.runworker(forkjoinpool.java:1979) [scala-library-2.11.7.jar:na]     @ scala.concurrent.forkjoin.forkjoinworkerthread.run(forkjoinworkerthread.java:107) [scala-library-2.11.7.jar:na] 

the actorpath in first connections same path when try reconnect.

only when restart system (by restarting container a), connection success in beginning.

versions:

java 8

akka version : 2.4.0

docker version

client:  version:      17.03.1-ce  api version:  1.27  go version:   go1.7.5  git commit:   c6d412e  built:        mon mar 27 17:07:28 2017  os/arch:      linux/amd64  server:  version:      17.03.1-ce  api version:  1.27 (minimum version 1.12)  go version:   go1.7.5  git commit:   c6d412e  built:        mon mar 27 17:07:28 2017  os/arch:      linux/amd64  experimental: false 

edit: im running simple remote, not akka cluster + conf:

akka {           provider = "akka.remote.remoteactorrefprovider"   remote {     transport = "akka.remote.netty.nettyremotetransport"     netty.tcp {       hostname = ${?akka_host}       port = ${?akka_port}        bind-hostname = 0.0.0.0     }   } } 

this conf works , messages been transferd between containers


Comments

Popular posts from this blog

python - Operations inside variables -

Generic Map Parameter java -

arrays - What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it? -