gpt4 book ai didi

scala - Akka 2.1 最小远程 actor 示例

转载 作者:行者123 更新时间:2023-12-04 09:11:16 26 4
gpt4 key购买 nike

编辑 请注意,我需要对此 https://github.com/akka/akka/commit/ce014ece3568938b2036c4ccfd21b92faba69607#L13L6 进行反向更改使接受的答案适用于 AKKA 2.1,这是 akkas 主页上的稳定发行版!

我已经阅读了我可以在 AKKA 上找到的所有教程,但我没有发现任何“开箱即用”的作品。

使用 eclipse,我想创建 2 个程序。

程序1:
启动 Actor “joe”并以某种方式使其在 127.0.0.1:some_port 上可用

程序2:
在 127.0.0.1:some_port 获取对 Actor “joe”的引用。向“joe”发送问候消息。

程序 1 应该在收到消息时打印一些内容。我想使用 AKKA 2.1 在 Eclipse 中运行这个例子。有人可以列出 2 个程序(程序 1 和程序 2)以及执行此操作的有效 application.conf 文件吗?

编辑>
让我告诉你我到目前为止得到了什么:

Actor

case class Greeting(who: String) extends Serializable

class GreetingActor extends Actor with ActorLogging {
def receive = {
case Greeting(who) ⇒ println("Hello " + who);log.info("Hello " + who)
}
}

程序1 :
package test

import akka.actor.ActorSystem

object Machine1 {

def main(args: Array[String]): Unit = {
val system = ActorSystem("MySystem")
}

}

程序2
package test

import akka.actor.ActorSystem
import akka.actor.Props
import akka.actor.actorRef2Scala

object Machine2 {
def main(args: Array[String]): Unit = {
val system = ActorSystem("MySystem")
val greeter = system.actorOf(Props[GreetingActor], name = "greeter")
greeter ! Greeting("Felix")
}
}

application.conf
akka {
actor {
deployment {
/greeter {
remote = "akka://MySystem@127.0.0.1:2553"
}
}
}
}

但是,当我只启动 Program2 时,这个程序可以工作,它输出:
Hello Felix
[INFO] [02/18/2013 12:27:29.999] [MySystem-akka.actor.default-dispatcher-2] [akka://MySystem/user/greeter] Hello Felix

似乎它没有选择我的 application.conf。我尝试将它放在我的 eclipse 项目的 ./src/和 ./文件夹中。没有不同。此外,我知道这确实是降级部署,但我只需要一个 hello world 程序即可使用 AKKA 工作。我花了很多时间在这上面却没有得到一个简单的工作应用程序。

最佳答案

Akka 2.2.3 更新

可以按如下方式创建一个最小的远程应用程序:

在 Eclipse 中创建 2 个项目:客户端和服务器

服务器:

服务器的代码是

package server

import akka.actor.Actor
import akka.actor.ActorLogging
import akka.actor.ActorSystem
import akka.actor.Props

class Joe extends Actor {
def receive = {
case msg: String => println("joe received " + msg + " from " + sender)
case _ => println("Received unknown msg ")
}
}

object Server extends App {
val system = ActorSystem("GreetingSystem")
val joe = system.actorOf(Props[Joe], name = "joe")
println(joe.path)
joe ! "local msg!"
println("Server ready")
}

服务器的 applincation.conf 是
akka {
loglevel = "DEBUG"
actor {
provider = "akka.remote.RemoteActorRefProvider"
}
remote {
enabled-transports = ["akka.remote.netty.tcp"]
netty.tcp {
hostname = "127.0.0.1"
port = 2552
}
log-sent-messages = on
log-received-messages = on
}
}

客户:

客户端代码是
package client

import akka.actor._
import akka.actor.ActorDSL._

object Greet_Sender extends App {

println("STARTING")

implicit val system = ActorSystem("GreetingSystem-1")

val joe = system.actorSelection("akka.tcp://GreetingSystem@127.0.0.1:2552/user/joe")

println("That 's Joe:" + joe)

val a = actor(new Act {
whenStarting { joe ! "Hello Joe from remote" }
})

joe ! "Hello"

println("Client has sent Hello to joe")
}

客户端 application.conf 是:
akka {
#log-config-on-start = on
stdout-loglevel = "DEBUG"
loglevel = "DEBUG"
actor {
provider = "akka.remote.RemoteActorRefProvider"
}
remote {
enabled-transports = ["akka.remote.netty.tcp"]
log-sent-messages = on
log-received-messages = on
netty.tcp {
hostname = "127.0.0.1"
port = 0
}
}
}

配置必须放在两个名为 application.conf 的文件中,都在两个项目的 bin 目录中。

关于scala - Akka 2.1 最小远程 actor 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14934782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com