通过简单的 akka-http 路由测试与演员陷入无限循环

Posted

技术标签:

【中文标题】通过简单的 akka-http 路由测试与演员陷入无限循环【英文标题】:Stuck in infinite loop with simple akka-http route test with actors 【发布时间】:2021-09-09 02:15:03 【问题描述】:

我有一个简单的示例,其中我有一个调用演员的路由,但是它似乎陷入了无限循环,并且 http 响应永远不会到来。我正在使用 akka-actor 2.6.15 版和 akka-http 10.2.4 版。这是示例代码,感谢任何帮助。

package test

import akka.actor.Actor, ActorRef, Props
import akka.http.scaladsl.server.Directives._
import akka.http.scaladsl.server.Route, _
import akka.http.scaladsl.testkit.RouteTestTimeout, ScalatestRouteTest
import akka.pattern.ask
import akka.util.Timeout
import org.scalatest.Matchers
import org.scalatest.wordspec.AnyWordSpec

import scala.concurrent.duration.DurationInt

case class TestMessage()

class TestActor extends Actor 
  def receive: Receive = 
    case _ => "response"
  


class AkkaHttpTest extends AnyWordSpec with Matchers with ScalatestRouteTest 
  val testActor: ActorRef = system.actorOf(Props(new TestActor()), name = "TestActor")
  implicit val timeout: Timeout = 15.seconds
  implicit val defaultTimeout = RouteTestTimeout(15.seconds)
  val route: Route = 
    get 
      pathSingleSlash 
        complete((testActor ? TestMessage()).mapTo[String])
      
    
  

  "Test" should 
    "Return text" in 
      Get() ~> route ~> check 
        println(responseAs[String])
      
    
  

【问题讨论】:

【参考方案1】:

要在 Akka 中回复消息,您必须明确发送回复。

在你的例子中:

def receive: Receive = 
  case _ =>
    sender ! "response"

【讨论】:

谢谢,就是这样!

以上是关于通过简单的 akka-http 路由测试与演员陷入无限循环的主要内容,如果未能解决你的问题,请参考以下文章

陷入构建游戏引擎的困境

基于akka-http搭建restfull框架

akka-http 发送连续的分块 http 响应(流)

如何使用 AKKA-HTTP、spray-json、oauth2 和 slick 优化 scala REST api?

学习python的第一个小目标:通过requests+xlrd实现简单接口测试,将测试用例维护在表格中,与脚本分开。

Akka(28): Http:About Akka-Http