当前位置: 首页 > 面试题库 >

如何响应演员呼吁的结果?

明松
2023-03-14
问题内容

我们正在研究使用Akka-HTTP Java API-使用路由DSL。

目前尚不清楚如何使用路由功能来响应HttpRequest。使用无类型Akka演员。例如,在匹配Route路径后,我们如何将请求传递给“ handler”
ActorRef,该ActorRef随后将以异步方式通过HttpResponse进行响应?

类似的问题被张贴阿卡用户的邮件列表上,但没有后续的解决方案,例如- https://groups.google.com/d/msg/akka-
user/qHe3Ko7EVvg/KC-aKz_o5aoJ


问题答案:

这可以通过结合使用onComplete指令和Ask模式来实现。

在下面的示例中,RequestHandlerActoractor用于创建HttpResponse基于的HttpRequest。从路线内询问此演员。

我从来没有使用Java来路由代码,所以我的回应是在Scala中。

import scala.concurrent.duration._
import akka.actor.ActorSystem
import akka.http.scaladsl.model.HttpResponse
import akka.http.scaladsl.model.HttpRequest
import akka.actor.Actor
import akka.http.scaladsl.server.Directives._
import akka.actor.Props
import akka.pattern.ask
import akka.util.Timeout
import scala.util.{Success, Failure}
import akka.http.scaladsl.model.StatusCodes.InternalServerError

class RequestHandlerActor extends Actor {
  override def receive = {
    case httpRequest : HttpRequest =>
      sender() ! HttpResponse(entity = "actor responds nicely")
  }
}

implicit val actorSystem = ActorSystem()
implicit val timeout = Timeout(5 seconds)

val requestRef = actorSystem actorOf Props[RequestHandlerActor]

val route = 
  extractRequest { request =>
    onComplete((requestRef ? request).mapTo[HttpResponse]) {
      case Success(response) => complete(response)
      case Failure(ex) => 
        complete((InternalServerError, s"Actor not playing nice: ${ex.getMessage}"))
    } 
  }

然后,可以bindAndHandle像其他任何Flow一样使用此路由传递给方法。



 类似资料:
  • 示范喷洒服务(路线): Redis执行元(Mock还没有实际的Redis客户端)

  • 我正在将现有应用程序从Akka Classic移植到Akka Typed。最初,您可以使用上下文获取对参与者的引用。actorSelection()。resolveOne() 我知道在Akka Type中不再支持这一点,我们应该使用来注册演员以供发现。 但是,我只想将消息发送到本地参与者,即存在于集群中每个节点上的本地单例。我有它的本地路径,但没有对它的直接引用。这是因为它是由Akka管理系统创建

  • 是否有任何AWS CLI调用Service Catalog的发布产品?我研究了“aws创建配置工件”,但不确定如何定义参数的键值,因为文档只提到了KeyName字符串,而没有提到value字符串?(http://docs.aws.amazon.com/cli/latest/reference/servicecatalog/create-provisioning-artifact.html) 我试图

  • Bootstrap提供了一些辅助类,以便更快地进行移动友好的开发。 这些可以用于通过媒体查询显示和隐藏内容,并结合大,小和中型设备。 谨慎使用这些,避免创建完全不同版本的同一站点。 Responsive utilities are currently only available for block and table toggling 。 类 设备 .visible-xs visible超小(小

  • 我从这里得到上面的错误消息: 特别是从第二行。。进口是 akka版本是2.2.1,scala是2.10.2,我正在使用sbt 0.13来构建它。 编辑:我用 结果如下: