如何在Akka中管理HTTP请求?

我在我的应用程序中使用Spray,从我在Github上看到的示例中,人们似乎通过将HTTPContext对象传递给所有参与者并onComplete { }在最后一个参与者中调用Future来处理Akka中的HTTP请求

在应用程序内深入发送上下文真的是个好主意吗?这样,每个事件对象都将具有上下文参数。

我们如何在Akka中正确处理HTTP请求和响应?我已经读过这篇文章,但是我想知道人们在以正确的方式实现生产中运行Akka的想法。

mattinbits

我更喜欢在Spray服务中使用Ask模式,并使用onSuccess指令,例如:

trait MyService extends HttpService {

  def worker: ActorRef

  implicit def timeout:Timeout

  implicit def ec:ExecutionContext

  def askWorker: Future[String] = (worker ? "Hello").mapTo[String]

  def myRoute = path("/") {
    get {
      onSuccess(askWorker){
        case str => complete(str)
      }
    }
  }
}

然后是一个具体的演员,例如:

class ServiceActor extends MyService with Actor {

  implicit val ec = context.system

  implicit val timeout = Timeout(3 seconds)

  val worker = context.actorOf(Props[WorkerActor])

  override def actorRefFactory = context.system

  def receive = runRoute(myRoute)
}

我喜欢这种模式,而不是传递请求上下文,因为这意味着其他参与者不必具有Http的任何概念。该服务可以完全替换为其他协议。在此示例中,工作人员角色可以是:

class WorkerActor extends Actor {

  def receive = {
    case "Hello" => sender() ! "Hello World"
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章