저는 Akka 2.1의 원격 액터에 대해 배우기 때문에 counter example provided by Typesafe을 적용하려고했습니다. 콘솔에서 틱을 보내기 위해 quick'n'dirty UI를 구현했습니다. 그리고 현재 카운트를 묻고 (그리고 결과를 보여주는 것으로) 종료합니다.Akka 2.1 원격 : 시스템에서 배우 공유
아이디어는 카운터 액터를 실행할 마스터 노드와 원격을 통해 메시지를 보낼 클라이언트 노드를 시작하는 것입니다. 그러나 구성 및 최소한의 코드 변경을 통해이를 달성하고 싶습니다. 따라서 구성을 변경하여 로컬 액터를 사용할 수 있습니다.
많은 인스턴스가 실행 중이지만 모든 API 호출이 하나의 액터를 통과해야하는 유사한 문제에 대해 this blog entry이 발견되었습니다.
비슷한 구성을 작성했지만 제대로 작동하지 않습니다. 현재 코드는 리모팅을 사용하지만 각각의 새 노드에 대해 마스터에 새 액터를 만들고이를 명시 적으로 경로에 제공하지 않고 기존 액터에 연결할 수 없습니다 (구성 지점 무시). 그러나 이것은 JVM간에 상태를 공유 할 수 없기 때문에 내가 원하는 것이 아닙니다. through a git repo
사용할 수
전체 실행 가능한 코드 이것은 내가 sbt run
을 사용하고 다른 창 sbt run -Dakka.remote.netty.port=0
에서 실행하는
import akka.actor._
import akka.pattern.ask
import scala.concurrent.duration._
import akka.util.Timeout
import scala.util._
case object Tick
case object Get
class Counter extends Actor {
var count = 0
val id = math.random.toString.substring(2)
println(s"\nmy name is $id\ni'm at ${self.path}\n")
def log(s: String) = println(s"$id: $s")
def receive = {
case Tick =>
count += 1
log(s"got a tick, now at $count")
case Get =>
sender ! count
log(s"asked for count, replied with $count")
}
}
object AkkaProjectInScala extends App {
val system = ActorSystem("ticker")
implicit val ec = system.dispatcher
val counter = system.actorOf(Props[Counter], "counter")
def step {
print("tick or quit? ")
readLine() match {
case "tick" => counter ! Tick
case "quit" => return
case _ =>
}
step
}
step
implicit val timeout = Timeout(5.seconds)
val f = counter ? Get
f onComplete {
case Failure(e) => throw e
case Success(count) => println("Count is " + count)
}
system.shutdown()
}
내 config 파일
akka {
actor {
provider = "akka.remote.RemoteActorRefProvider"
deployment {
/counter {
remote = "akka://[email protected]:2552"
}
}
}
remote {
transport = "akka.remote.netty.NettyRemoteTransport"
log-sent-messages = on
netty {
hostname = "127.0.0.1"
}
}
}
그리고 전체 소스입니다.
코드가 수정되었습니다. 매개 변수를 변경해도 동작은 변경되지 않습니다. 그것은 작동하지만 내가 원하는 방식으로 작동하지는 않습니다. 내 질문을 바꾸려면 : (가능한 경우) 모든 클라이언트에 대해 새 액터를 만들지 않고 기존 액터를 공유하도록 akka를 구성하는 방법은 무엇입니까? – edofic