在 Play Framework 2.4 中为 Scala 实现 Akka

     2023-04-01     248

关键词:

【中文标题】在 Play Framework 2.4 中为 Scala 实现 Akka【英文标题】:Implementing Akka in Play Framework 2.4 for Scala 【发布时间】:2015-10-20 10:06:13 【问题描述】:

我正在尝试复制Integrating with Akka, Play 2.4 for Scala doc 中提出的基本示例。但是我很难将最后的部分放在一起......

我已经使用以下代码在app/actors/HelloActor.scala 定义了演员(参见Writing actors 段):

package actors

import akka.actor._

object HelloActor 
    def props = Props[HelloActor]

    case class SayHello(name: String)


class HelloActor extends Actor 
    import HelloActor._

    def receive = 
        case SayHello(name: String) =>
            sender() ! "Hello, " + name
    

那么(请参阅Creating and using actors)我想我应该在app/controllers/Hello.scala 创建一个控制器,例如:

package controllers

import play.api.mvc._
import akka.actor._
import javax.inject._

import actors.HelloActor

@Singleton
class Hello @Inject() (system: ActorSystem) extends Controller 

    val helloActor = system.actorOf(HelloActor.props, "hello-actor")

    ...


问题:我在哪里以及如何使用以下段落Asking things of actors 中的代码来获得有效的解决方案?我曾尝试将其添加到上述Hello.scala 控制器但没有成功。

import play.api.libs.concurrent.Execution.Implicits.defaultContext
import scala.concurrent.duration._
import akka.pattern.ask
implicit val timeout = 5.seconds

def sayHello(name: String) = Action.async 
    (helloActor ? SayHello(name)).mapTo[String].map  message =>
        Ok(message)
    

【问题讨论】:

它应该按预期工作,你有什么错误? with implicit val timeout = 5.seconds 我摇摇晃晃地收到以下错误 value seconds is not a member of Int Note: implicit value timeout is not applicable here because it comes after the application point and it lacks an explicit result type 加上我不是 100% 确定如何将所有东西放在控制器中 【参考方案1】:

找到了解决方案,我在定义隐式超时时遇到了一些问题,这是工作控制器:

package controllers

import play.api.mvc._
import akka.actor._
import javax.inject._

import actors.HelloActor
import actors.HelloActor.SayHello

import play.api.libs.concurrent.Execution.Implicits.defaultContext
import scala.concurrent.duration._
import akka.pattern.ask
import akka.util.Timeout

@Singleton
class Hello @Inject() (system: ActorSystem) extends Controller 

  val helloActor = system.actorOf(HelloActor.props, "hello-actor")

  implicit val timeout: Timeout = 5.seconds

  def sayHello(name: String) = Action.async  

    (helloActor ? SayHello(name)).mapTo[String].map  message ⇒
      Ok(message)
    
  

另外我在app/conf/routes中添加了以下路由:

# Actor test
GET     /hello/:name                controllers.Hello.sayHello(name)

【讨论】:

如果你写类似implicit val timeout: Timeout = 5.seconds的东西(注意我已经明确添加了类型)可能会起作用,这是因为显式类型会发生隐式转换。 @EndeNeu 是的,谢谢,它有效,我正在编辑我的答案以反映这一点

Play Framework 2.4 发送邮件

】PlayFramework2.4发送邮件【英文标题】:PlayFramework2.4sendingemail【发布时间】:2015-08-1516:39:47【问题描述】:我是Scala新手,发送电子邮件时遇到问题...我正在与Play合作!2.4并且必须遵循build.scala"com.typesafe.play"%%"play-mailer"%"3.0.1"在ap... 查看详情

twitterBootstrap 在 play framework 2.4 中不被识别?

】twitterBootstrap在playframework2.4中不被识别?【英文标题】:twitterBootstrapisnotrecognizedinplayframework2.4?【发布时间】:2015-07-3109:24:42【问题描述】:我正在使用Play框架2.4。我尝试按照https://www.playframework.com/documentation/2.0/ScalaFormHelpers的... 查看详情

如何使用 Jenkins 在本地自动部署 Play Framework (2.4) 应用程序?

】如何使用Jenkins在本地自动部署PlayFramework(2.4)应用程序?【英文标题】:Howtoauto-deployPlayFramework(2.4)applicationlocallywithJenkins?【发布时间】:2015-06-2606:11:20【问题描述】:如何在Jenkins运行的同一台服务器上本地使用Jenkins自动部署Pl... 查看详情

如何在scala play framework 2.4中定义onStart方法

】如何在scalaplayframework2.4中定义onStart方法【英文标题】:HowtodefineonStartmethodinscalaplayframework2.4【发布时间】:2015-11-2511:34:09【问题描述】:如何使用scala在playframework2.4中定义启动作业?playframeworkGlobalSetting我已经:classStartupConfigu... 查看详情

如何在 play framework(scala) 2.4 中获取当前会话或请求对象?

】如何在playframework(scala)2.4中获取当前会话或请求对象?【英文标题】:howtogetcurrentsessionorrequestobjectinplayframework(scala)2.4?【发布时间】:2016-03-0405:37:21【问题描述】:我正在使用带有Scala的PlayFramework2.4开发应用程序。在我的应用... 查看详情

由于构建或路由导致 Play Framework 2.4 编译错误

】由于构建或路由导致PlayFramework2.4编译错误【英文标题】:PlayFramwork2.4compileerrorduetobuildorrouting【发布时间】:2015-11-0820:35:15【问题描述】:今天,一边用Play!做教程!框架,我在编译源码的时候遇到了一个问题,貌似和路由有... 查看详情

Play Framework 2.4 在 Scala 模板中使用注入变量

】PlayFramework2.4在Scala模板中使用注入变量【英文标题】:PlayFramework2.4useinjectedvariableinScalatemplate【发布时间】:2015-10-0414:44:24【问题描述】:我想在我的网页菜单栏中显示一些数据库中的数据。为了获取数据,我有一个通常使用G... 查看详情

Play Framework 2.4 授权

】PlayFramework2.4授权【英文标题】:PlayFramework2.4authorization【发布时间】:2015-07-2310:07:43【问题描述】:我有一个代表用户系统的类(帐户)。帐户包含字段角色。它是包含三个案例的枚举。帐号类publicclassAccountextendsModel@Id@Emailpub... 查看详情

Play framework 2.4 表单填写不起作用

】Playframework2.4表单填写不起作用【英文标题】:Playframework2.4formfilldoesnotwork【发布时间】:2015-11-1222:36:54【问题描述】:在PlayFramework2.4Java中,我需要使用以下代码填写表单,但它不起作用。usereditform.field("email").value()的输出值... 查看详情

在play framework 2.4中,如何访问ssl socket(或ssl client cert)

】在playframework2.4中,如何访问sslsocket(或sslclientcert)【英文标题】:Inplayframework2.4,howtoaccesssslsocket(orsslclientcert)【发布时间】:2015-08-0421:57:05【问题描述】:使用播放框架2.4。我通过提供我自己的SSLEngineProvider实现打开了需要的... 查看详情

在 Play framework 2.4 中使用 Slick 3 在哪里初始化数据库?

】在Playframework2.4中使用Slick3在哪里初始化数据库?【英文标题】:WheretoinitializeadatabaseinPlayframework2.4withSlick3?【发布时间】:2015-09-1001:50:56【问题描述】:当数据库表不存在时,Slick3.0.2不会自动创建数据库表,因此您必须执行以... 查看详情

如何将 CDN 与 Play Framework 2.4 资产一起使用?

】如何将CDN与PlayFramework2.4资产一起使用?【英文标题】:HowtouseaCDNwithPlayFramework2.4Assets?【发布时间】:2015-07-0619:34:52【问题描述】:我想使用在通过以下方式获取资产时自动添加到资产URL的CDNURL:@routes.Assets.versioned("js/whatever.js"... 查看详情

我可以在 Play Framework 2.4 中从两个没有转换器的模型中编写 Json

】我可以在PlayFramework2.4中从两个没有转换器的模型中编写Json【英文标题】:CanIwriteJsonfromtwomodelwithouttransformersinPlayFramework2.4【发布时间】:2015-12-1612:10:13【问题描述】:我有两个modelclassescaseclassCalendar(id:String,summary:String)caseclassA... 查看详情

Play Framework 2.4 全局对象迁移

】PlayFramework2.4全局对象迁移【英文标题】:PlayFramework2.4Globalobjectmigration【发布时间】:2016-04-1405:43:20【问题描述】:我目前正在将我的PlayFramework项目从2.3迁移到2.4。现在我需要迁移我的全局对象。以下是他们迁移指南中的记录... 查看详情

Play framework 2.4 打包后无法加载图片(404 source not found)

】Playframework2.4打包后无法加载图片(404sourcenotfound)【英文标题】:Playframework2.4cannotloadimageafterpackaging(404sourcenotfound)【发布时间】:2015-08-1013:17:42【问题描述】:我在Windows上使用Play框架2.4版已经有一段时间了。Web应用程序在开... 查看详情

Play Framework 2.4 - 注入的字段始终为空

】PlayFramework2.4-注入的字段始终为空【英文标题】:PlayFramework2.4-Injectedfieldsarealwaysnull【发布时间】:2015-09-1423:54:39【问题描述】:我有一个简单的注入模块:publicclassInjectionModuleextendsAbstractModule@Overrideprotectedvoidconfigure()bind(SomeMod... 查看详情

从 Play Framework 更改 WS API! 2.4 至 2.5

】从PlayFramework更改WSAPI!2.4至2.5【英文标题】:ChangingWSAPIfromPlayFramework!2.4to2.5【发布时间】:2016-05-1013:23:47【问题描述】:使用Playframework!2.5WS请求的结果现在是CompletionStage&lt;WSResponse&gt;。CompletionStage<WSResponse>completi 查看详情

Play Framework 2.4 多个Promises的顺序运行

】PlayFramework2.4多个Promises的顺序运行【英文标题】:PlayFramework2.4SequentialrunofmultiplePromises【发布时间】:2016-04-1817:45:12【问题描述】:我有一个Play2.4(基于Java)的应用程序,其中一些后台Akka任务实现为返回Promise的函数。Task1通... 查看详情