案例介绍
基于Akka实现在两个进程间发送、接收消息。Worker启动后去连接Master,并发送消息,Master接收到消息后,再回复Worker消息。
1. Worker实现
步骤
- 创建一个Maven模块,导入依赖和配置文件
- 创建启动WorkerActor
- 发送"setup"消息给WorkerActor,WorkerActor接收打印消息
- 启动测试
参考代码
Worker.scala
val workerActorSystem = ActorSystem("actorSystem", ConfigFactory.load())
val workerActor: ActorRef = workerActorSystem.actorOf(Props(WorkerActor), "WorkerActor")
// 发送消息给WorkerActor
workerActor ! "setup"
WorkerActor.scala
object WorkerActor extends Actor{
override def receive: Receive = {
case "setup" =>
println("WorkerActor:启动Worker")
}
}
2. Master实现
步骤
- 创建Maven模块,导入依赖和配置文件
- 创建启动MasterActor
- WorkerActor发送"connect"消息给MasterActor
- MasterActor回复"success"消息给WorkerActor
- WorkerActor接收并打印接收到的消息
- 启动Master、Worker测试
参考代码
Master.scala
val masterActorSystem = ActorSystem("MasterActorSystem", ConfigFactory.load())
val masterActor: ActorRef = masterActorSystem.actorOf(Props(MasterActor), "MasterActor")
MasterActor.scala
object MasterActor extends Actor{
override def receive: Receive = {
case "connect" =>
println("2. Worker连接到Master")
sender ! "success"
}
}
WorkerActor.scala
object WorkerActor extends Actor{
override def receive: Receive = {
case "setup" =>
println("1. 启动Worker...")
val masterActor = context.actorSelection("akka.tcp://MasterActorSystem@127.0.0.1:9999/user/MasterActor")
// 发送connect
masterActor ! "connect"
case "success" =>
println("3. 连接Master成功...")
}
}