Akka

Akkaでround robinのremote routing

More than 1 year has passed since last update.

cluster構成で、remoteのround robin routerを使う場合の
設定、実装

round robinを使う場合のconf

application.conf
akka {
  actor {
    provider = "akka.cluster.ClusterActorRefProvider"

    deployment {
      /clusterrouter {
        router = round-robin-pool
        nr-of-instances = 10
        target.nodes = [
          "akka.tcp://MetaInfoScraperCluster@なんか:2550",
          "akka.tcp://MetaInfoScraperCluster@あれか:2550"
        ]
      }
    }
  }

  remote {
    log-remote-lifecycle-events = on
    netty.tcp {
      hostname = "127.0.0.1"
      port = 0
    }
  }

  cluster {
    seed-nodes = [
      "akka.tcp://MetaInfoScraperCluster@なんか:2550",
      "akka.tcp://MetaInfoScraperCluster@あれか:2550"
    ]
    auto-down-unreachable-after = 10s
    //auto-down = on
  }
}

clusterの生成

val system = ActorSystem("MetaInfoScraperCluster")
val clusterListener = system.actorOf(Props[ClusterListener],
      name = "clusterListener")
Cluster(system).subscribe(clusterListener, classOf[ClusterDomainEvent])

routerの生成

    val router = system.actorOf(FromConfig.props(Props[MetaInfoScraper]),    "clusterrouter")

      val urls = Source.fromFile(input).getLines()
      urls.filter(!_.startsWith("#")).zipWithIndex.foreach {
        case (url, i) => {
          println(s"!! url: $url")
          // HashingRouter
          //router.tell(ConsistentHashableEnvelope(Request(url),i), clusterListener)
          router.tell(Request(url), clusterListener)
        }
      }