在play框架中正确使用actor(java)

时间:2014-05-02 18:25:41

标签: java jdbc playframework akka actor

在play框架中对actor有疑问。免责声明 - 我仍然是演员/ AKKA的新手,现在已经花了很长时间阅读文档。如果以下任何一个问题的答案已经记录在我错过的某个地方,我深表歉意。

我想验证的是我正在为以下场景实施正确/惯用的解决方案:

案例: 使用play框架,我需要执行可能阻塞(sql查询)的代码,使其不会妨碍我的其他Web服务器。

以下是我目前的解决方案和一些问题:

    static ActorRef actorTest = Akka.system().actorOf(
       Props.create(ActorTest.class));
     public static Promise<Result> runQuery() {
             Promise<Result>r = Promise.wrap(
     Patterns.ask(actorTest, query, 600000)).map(
                     new Function<Object, Result>() {
                         public Result apply(Object response) {
                             return ok(response.toString());
                         }
                     });
             return r;
         }
  1. 现在如果我收到很多请求,他们会简单地进入一个无限制的队列,因为他们是由演员处理的吗?或者,
  2. 我已经阅读了actor routing.上的一些文档。我是否必须照顾这一点,即制作一个路由器演员而不是使用某种路由逻辑向子演员发送查询?或者以上都是在游戏框架中处理的?
  3. 如何配置与上述actor相关的thred数量(请参阅application.conf文件阅读此内容)。
  4. 对此有任何澄清将不胜感激。

1 个答案:

答案 0 :(得分:1)

我主要使用Scala与Akka和Play,所以我可能会误导你,但让我们试一试。

首先,你可以放弃演员来完成你想要的任务。我只是在未来运行计算。

当您需要某个州时,用户角色。通过异步均值运行查询可以很好地使用Future。

Futures和Actora在ExecutionContext上运行,默认转世在Scala中可用,通过引用导入和使用。这在Java中可能有所不同,但可能并不多。就像你说的那样,在application.conf中配置了默认的ExecutionContext。