通过简单的 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、spray-json、oauth2 和 slick 优化 scala REST api?