2016-06-08 12 views
0

Я пытаюсь написать актера, который подключается к потоку Amazon Kinesis, а затем передает любые сообщения, полученные через Comet, в веб-интерфейс. Для этого я использую Source.actorPublisher и используя метод json с Comet in Play описан here. Я отлично справился с событиями, используя Source.tick(), но когда я попытался использовать ActorPublisher, актеру никогда не посылали никаких сообщений Request, как ожидалось. Как запросы на данные обычно отправляются потоком Akka? Я использую v2.5 в Play Framework.ActorPublisher как источник событий Comet в приложении для воспроизведения

Мой код контроллера:

def subDeviceSeen(id: Id): Action[AnyContent] = Action { 
    val deviceSeenSource: Source[DeviceSeenMessage, ActorRef] = Source.actorPublisher(DeviceSeenEventActor.props) 
    Ok.chunked(deviceSeenSource 
    .filter(m => m.id == id) 
     .map(Json.toJson(_)) 
     via Comet.json("parent.deviceSeen")).as(ContentTypes.JSON) 
} 

Я делаю что-то явно не в выше? Вот мой Actor код: не

object DeviceSeenEventActor { 
    def props: Props = Props[DeviceSeenEventActor] 
} 

class DeviceSeenEventActor extends ActorPublisher[DeviceSeenMessage] { 

implicit val mat = ActorMaterializer()(context) 

val log = Logging(context.system, this) 

def receive: Receive = { 
    case Request => log.debug("Received request message") 
        initKinesis() 
        context.become(run) 
    case Cancel => context.stop(self) 
} 

def run: Receive = { 
    case vsm:DeviceSeenMessage => onNext(vsm) 
           log.debug("Received request message") 
           onCompleteThenStop() //we are currently only interested in one message 
    case _:Any     => log.warning("Unknown message received by event Actor") 
} 

private def initKinesis() = { 
    //init kinesis, a worker is created and given a reference to this Actor. 
    //The reference is used to send messages to the actor. 
} 

}

'Полученное сообщение с запросом' строка журнала не отображается. Я пропустил некоторые неявные? На игровой консоли нет никаких предупреждений или чего-либо еще, что явно отображается.

ответ

0

Проблема была в том, что я был сопоставлен с образцом на case Request => ... вместо case Request() => .... Поскольку у меня не было случая по умолчанию в моем методе , сообщение было просто отключено Актером.