【发布时间】:2017-02-02 16:09:03
【问题描述】:
当 Actor 收到任何消息时,我正在使用 JavaAkka 执行一些任务。当我的演员收到一条消息时,我想从我的一个控制器中执行一些功能,但是在这些功能内部使用 http 上下文:
ctx().messages().at("sensor_alert");
或
session().get("id");
我得到了错误:
[error] 2017-02-02 13:06:54 -0300 a.a.OneForOneStrategy - There is no HTTP Context available from here.
java.lang.RuntimeException: There is no HTTP Context available from here.
at play.mvc.Http$Context.current(Http.java:62)
at play.mvc.Controller.ctx(Controller.java:27)
at controllers.IpmiMonitorController.gerarAlertas(IpmiMonitorController.java:370)
at actor.IpmiActor.onReceive(IpmiActor.java:27)
at akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:165)
at akka.actor.Actor$class.aroundReceive(Actor.scala:484)
at akka.actor.UntypedActor.aroundReceive(UntypedActor.scala:95)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526)
at akka.actor.ActorCell.invoke(ActorCell.scala:495)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257)
有什么解决办法吗?
【问题讨论】:
-
从控制器调用函数的用例是什么?如果你有业务功能,这应该进入其他一些类——看起来没有 http 上下文等,你需要某种特定于用户的属性(会话、语言)。如果您从参与者调用控制器,您会期望哪些值?那会是哪个用户?谁触发了actor消息?它来自控制器,您可以使用询问模式,从而为当前用户“停留”在控制器中。
标签: java playframework playframework-2.0 akka