在Akka中,调度器和路由器是两个不同的概念,可以分开使用,也可以结合使用。
import akka.actor.{Actor, ActorSystem, Props}
import scala.concurrent.duration._
class MyActor extends Actor {
def receive: Receive = {
case "Hello" => println("Hello!")
}
}
object SchedulerExample extends App {
val system = ActorSystem("SchedulerExample")
val myActor = system.actorOf(Props[MyActor], "myActor")
import system.dispatcher
system.scheduler.scheduleOnce(1.second) {
myActor ! "Hello"
}
system.scheduler.schedule(1.second, 2.seconds) {
myActor ! "Hello"
}
}
上述代码中,我们创建了一个名为MyActor的Actor,并使用Akka调度器在1秒后向该Actor发送消息"Hello",然后每2秒钟重复发送一次。
import akka.actor.{Actor, ActorSystem, Props}
import akka.routing.{RoundRobinPool, Router}
class Worker extends Actor {
def receive: Receive = {
case msg: String => println(s"Received message: $msg")
}
}
class Master extends Actor {
var router: Router = {
val routees = Vector.fill(5) {
context.actorOf(Props[Worker])
}
Router(RoundRobinPool(5).props(), routees)
}
def receive: Receive = {
case msg: String =>
router.route(msg, sender())
}
}
object RouterExample extends App {
val system = ActorSystem("RouterExample")
val master = system.actorOf(Props[Master], "master")
master ! "Hello"
master ! "World"
Thread.sleep(1000)
system.terminate()
}
上述代码中,我们创建了一个名为Worker的Actor作为路由目标,然后创建了一个名为Master的Actor作为路由器。Master创建了一个包含5个Worker实例的路由器,并使用RoundRobinPool进行消息分发。在示例中,我们向Master发送了两个消息:"Hello"和"World",这些消息将被路由到Worker实例中的一个。
注意:以上示例仅为演示目的,实际应用中可能需要更复杂的调度器和路由器配置。