Я пытаюсь написать актера, который подключается к потоку 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.
}
}
'Полученное сообщение с запросом' строка журнала не отображается. Я пропустил некоторые неявные? На игровой консоли нет никаких предупреждений или чего-либо еще, что явно отображается.