标签: akka-http

如何创建一个可以通过方法调用稍后接收元素的Source?

我想Source在它上面创建一个和后来的推送元素,如:

val src = ... // create the Source here
// and then, do something like this
pushElement(x1, src)
pushElement(x2, src)
Run Code Online (Sandbox Code Playgroud)

建议的方法是什么?

谢谢!

scala akka akka-stream akka-http

50
推荐指数
2
解决办法
1万
查看次数

Spray,Akka-http和Play,这是新的HTTP/REST项目的最佳选择

我将使用Scala和Akka Actors开发新的HTTP/REST服务.

我有使用Play的经验,但我并不需要一个完整的Web框架.从我读到的,我认为Spray是一个合适的选择.在新到达的AKKA-HTTP之后,我的问题来自Spray的未来.

Spray项目是否会独立于Akka-HTTP项目而增长,还是两个项目将合并为一个Akka-HTTTP?

如果我开始用Spray开发,这有什么影响?另外我读到Play将集成AKKA-HTTP.所以我终于想知道是不是应该选择Play?

谢谢你的帮助.

scala akka playframework spray akka-http

38
推荐指数
1
解决办法
2万
查看次数

Akka HTTP:将来阻止阻止服务器

我正在尝试使用Akka HTTP来基本验证我的请求.碰巧我有一个外部资源来进行身份验证,因此我必须对此资源进行休息调用.

这需要一些时间,并且在处理时,我的API的其余部分似乎被阻止,等待此调用.我用一个非常简单的例子重现了这个:

// used dispatcher:
implicit val system = ActorSystem()
implicit val executor = system.dispatcher
implicit val materializer = ActorMaterializer()


val routes = 
  (post & entity(as[String])) { e =>
    complete {
      Future{
        Thread.sleep(5000)
        e
      }
    }
  } ~
  (get & path(Segment)) { r =>
    complete {
      "get"
    }
  }
Run Code Online (Sandbox Code Playgroud)

如果我发布到日志端点,我的get端点也会等待5秒,这是日志端点所指示的.

这是预期的行为,如果是,如何在不阻止整个API的情况下进行阻止操作?

scala future akka akka-http

36
推荐指数
1
解决办法
6411
查看次数

akka HttpResponse将body读取为String scala

所以我有一个带有这个签名的函数(akka.http.model.HttpResponse):

def apply(query: Seq[(String, String)], accept: String): HttpResponse
Run Code Online (Sandbox Code Playgroud)

我只是在测试中得到一个值:

val resp = TagAPI(Seq.empty[(String, String)], api.acceptHeader)
Run Code Online (Sandbox Code Playgroud)

我想在测试中检查它的身体,例如:

resp.entity.asString == "tags"
Run Code Online (Sandbox Code Playgroud)

我的问题是如何将响应体作为字符串?

scala akka akka-http

29
推荐指数
5
解决办法
2万
查看次数

如何记录Akka HTTP客户端请求

我需要记录akka http客户端请求以及他们的响应.虽然似乎有一些用于记录这些请求的API,但没有关于如何完成这些请求的明确文档.我的方法是创建一个记录的请求,透明地包装Http().singleRequest(req)如下:

def loggedRequest(req: HttpRequest)
                  (implicit system: ActorSystem, ctx: ExecutionContext, m: Materializer): Future[HttpResponse] = {

  Http().singleRequest(req).map { resp ?
    Unmarshal(resp.entity).to[String].foreach{s ?
      system.log.info(req.toString)
      system.log.info(resp.toString + "\n" + s)
    }
    resp
  }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我必须通过解组或通过简单的请求来获取未来resp.entity.dataBytes,以便恢复响应的主体.我得到了日志记录但是承诺已经完成,我无法再将实体解组为实际数据.一个工作的解决方案将记录请求和响应并传递此测试用例,而IllegalStateException不会抛出"Promise already completed":

describe("Logged rest requests") {

  it("deliver typed responses") {
    val foo = Rest.loggedRequest(Get(s"http://127.0.0.1:9000/some/path"))
    val resp = foo.futureValue(patience)
    resp.status shouldBe StatusCodes.OK
    val res = Unmarshal(resp.entity).to[MyClass].futureValue
  }
}
Run Code Online (Sandbox Code Playgroud)

想法欢迎.

scala akka akka-http

27
推荐指数
2
解决办法
1万
查看次数

akka http:Akka溪流与演员建立休息服务

在akka http上创建一个包含60+ API的REST Web服务时.如何选择是否应该选择akka流或akka演员?在他的帖子中,乔斯展示了两种在akka http上创建API的方法,但他没有显示何时我应该选择一个而不是另一个.

scala akka akka-stream akka-http

20
推荐指数
2
解决办法
5692
查看次数

Akka Http性能调整

我在Akka-http框架(版本:10.0)上执行负载测试,我使用的是wrk工具.wrk命令:

wrk -t6 -c10000 -d 60s --timeout 10s --latency http://localhost:8080/hello

首次运行没有任何阻塞调用,

object WebServer {

  implicit val system = ActorSystem("my-system")
  implicit val materializer = ActorMaterializer()
  implicit val executionContext = system.dispatcher
  def main(args: Array[String]) {


    val bindingFuture = Http().bindAndHandle(router.route, "localhost", 8080)

    println(
      s"Server online at http://localhost:8080/\nPress RETURN to stop...")
    StdIn.readLine() // let it run until user presses return
    bindingFuture
      .flatMap(_.unbind()) // trigger unbinding from the port
      .onComplete(_ => system.terminate()) // and shutdown when done
  }
}

object router {
  implicit …
Run Code Online (Sandbox Code Playgroud)

scala akka akka-http

20
推荐指数
1
解决办法
3760
查看次数

使用Akka HTTP查询GET请求的参数(正式名称为Spray)

Akka HTTP(正式名称为Spray)的一个特性是它能够自动编组和解组从json到案例类等的数据.我已经成功地使这个工作得很好.

目前,我正在尝试创建一个使用查询参数执行GET请求的HTTP客户端.代码目前看起来像这样:

val httpResponse: Future[HttpResponse] =
  Http().singleRequest(HttpRequest(
    uri = s"""http://${config.getString("http.serverHost")}:${config.getInt("http.port")}/""" +
          s"query?seq=${seq}" +
          s"&max-mismatches=${maxMismatches}" +
          s"&pam-policy=${pamPolicy}"))
Run Code Online (Sandbox Code Playgroud)

嗯,那不是那么漂亮.如果我可以传入一个包含查询参数的case类,并且让Akka HTTP自动生成查询参数,就像它对json一样.(另外,Akka HTTP的服务器端有一种解析GET查询参数的优雅方式,所以人们会认为它也会有一种优雅的方式来生成它们.)

我想做类似以下的事情:

val httpResponse: Future[HttpResponse] =
  Http().singleRequest(HttpRequest(
    uri = s"""http://${config.getString("http.serverHost")}:${config.getInt("http.port")}/query""",
    entity = QueryParams(seq = seq, maxMismatches = maxMismatches, pamPolicy = pamPolicy)))
Run Code Online (Sandbox Code Playgroud)

只是,上述实际上并不起作用.

我想用Akka HTTP以某种方式做什么?或者我只是需要以老式的方式做事?即,显式生成查询参数,就像我在上面的第一个代码块中一样.

(我知道如果我要将其从GET更改为POST,我可能会让它更像我希望它工作,从那时起我可以从案例中自动转换POST请求的内容上课到json,但我真的不想这样做.)

akka spray akka-http

16
推荐指数
1
解决办法
9765
查看次数

使用akka-http执行OAuth2身份验证的最佳方法是什么?

Akka HTTP和Spray提供了一个authenticateOAuth2指令,但他们的文档说明了这一点

该指令不实现完整的OAuth2协议,而是通过从HTTP头中提取所需的令牌来实现它.

我也找不到任何为Akka HTTP或Spray实现OAuth2的库.有什么我想念的,或者这只是现在这些库的状态?

scala oauth-2.0 spray akka-http

16
推荐指数
1
解决办法
2821
查看次数

使用Akka Http转换Slick Streaming数据并发送Chunked Response

目的是从数据库流式传输数据,对此数据块执行一些计算(此计算返回某些案例类的Future),并将此数据作为分块响应发送给用户.目前,我能够流式传输数据并发送响应,而无需执行任何计算.但是,我无法执行此计算,然后流式传输结果.

这是我实施的路线.

def streamingDB1 =
path("streaming-db1") {
  get {
    val src = Source.fromPublisher(db.stream(getRds))
    complete(src)
  }
}
Run Code Online (Sandbox Code Playgroud)

函数getRds返回映射到case类的表的行(使用slick).现在考虑函数compute,它将每行作为输入并返回另一个案例类的Future.就像是

def compute(x: Tweet) : Future[TweetNew] = ?
Run Code Online (Sandbox Code Playgroud)

如何在变量src上实现此函数,并将此计算的分块响应(作为流)发送给用户.

scala akka slick akka-stream akka-http

15
推荐指数
1
解决办法
474
查看次数

标签 统计

akka-http ×10

akka ×9

scala ×9

akka-stream ×3

spray ×3

future ×1

oauth-2.0 ×1

playframework ×1

slick ×1