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
Post a Comment