2014-04-16 3 views
0

, 방금 라우터에 배우 심판의 컬렉션을 전달할 수 있습니다 BroadcastRouter 이후akka 2.3에서 BroadcastRouter를 바꾸는 방법은 무엇입니까? 이전 akka 버전에서

case Children(passengers: Iterable[ActorRef]) => 
    val router = context.actorOf(Props().withRouter(BroadcastRouter(passengers)), 
    "Passengers") 

지금은 사용되지 않습니다, 여기에 내가 Akka 2.3 그 일을 고려하고 방법입니다

case Children(passengers: Iterable[ActorRef]) => 
    val paths = passengers.map { p => p.path.toString } 
    val router = context.actorOf(BroadcastGroup(paths).props(), "Passengers") 

이것이 맞습니까?

추신 :이 예제는 Akka 동시 처리, 10.4 절에서 발췌 한 것입니다.

답변

0

얍이 실제로 작동 :

case Children(passengers: Iterable[ActorRef]) => 
    val paths = passengers.map { p => p.path.toString } 
    val router = context.actorOf(BroadcastGroup(paths).props(), "Passengers") 

시험에 의해 목격 :

package zzz.akka.avionics.tests 

import com.typesafe.config.ConfigFactory 
import zzz.akka.avionics.{PassengerSupervisor, PassengerProvider} 
import akka.actor.{Props, ActorSystem, Actor, ActorRef} 
import org.scalatest.{BeforeAndAfterAll, WordSpecLike, Matchers} 
import akka.testkit.{TestKit, ImplicitSender} 
import zzz.akka.avionics.PassengerSupervisor.{PassengerBroadcaster, GetPassengerBroadcaster} 
import scala.concurrent.duration._ 

/** Test for the passenger supervisor. 
* Created by Andriy Drozdyuk on 16-Apr-14. 
*/ 

object PassengerSupervisorSpec { 
    val config = ConfigFactory.parseString(
    """ 
     zzz.akka.avionics.passengers = [ 
      [ "Kelly Franqui", "23", "A" ], 
      [ "Tyrone Dotts", "23", "B" ], 
      [ "Malinda Class", "23", "C" ], 
      [ "Kenya Jolicoeur", "24", "A" ], 
      [ "Christian Piche", "24", "B" ] 
     ] 
    """.stripMargin) 

} 

// We won't work with "real" passengers. This mock 
// passenger will be much easier to verify things with 
trait TestPassengerProvider extends PassengerProvider { 
    override def newPassenger(callButton: ActorRef): Actor = { 
    new Actor { 
     def receive = { 
     case m => callButton ! m 
     } 
    } 
    } 
} 

class PassengerSupervisorSpec extends TestKit(ActorSystem("PassengerSupervisorSpec", 
    PassengerSupervisorSpec.config)) 
with ImplicitSender 
with WordSpecLike 
with BeforeAndAfterAll 
with Matchers { 
    // Clean up the system when all the tests are done 
    override def afterAll() { 
    system.shutdown() 
    } 

    "PassengerSupervisor" should { 
    "work" in { 
     // Get our SUT 
     val a = system.actorOf(Props(new PassengerSupervisor(testActor) with TestPassengerProvider)) 
     // Grab the BroadcastRouter 
     a ! GetPassengerBroadcaster 
     val broadcaster = expectMsgType[PassengerBroadcaster].broadcaster 
     broadcaster ! "Hithere" 
     // All 5 passengers should say "Hithere" 
     expectMsg("Hithere") 
     expectMsg("Hithere") 
     expectMsg("Hithere") 
     expectMsg("Hithere") 
     expectMsg("Hithere") 
     // And then nothing else 
     expectNoMsg(100.milliseconds) 
     // Ensure that the cache works 
     a ! GetPassengerBroadcaster 
     expectMsg(PassengerBroadcaster(`broadcaster`)) 
    } 
    } 
} 
관련 문제