如何在Akka Http中拆分路线

gkl3eglg  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(138)

将需要implicit ActorSystem的路由拆分到不同文件的最佳方法是什么?

// in UserRoutes.scala
object UserRoutes {
  val route: Route = ???
}

// in OrderRoutes.scala
object OrderRoutes {
  val route: Route = ???
}

// In MyApp.scala
object MyApp extends App {
  implicit val system = ActorSystem(Behaviors.empty, "my-system")
  implicit val ec = system.executionContext

  val route = UserRoutes.route ~ OrderRoutes.route

  Http().newServerAt("localhost", 8888).bind(route)
}

所有这些路由都发出HTTP请求,所以它们需要ActorSystem的存在,传递它的最佳方式是什么?将对象变成类并将其传递给构造函数,还是有更聪明的方法?

wixjitnu

wixjitnu1#

你可以有这样的

// in UserRoutes.scala
object UserRoutes {
  def route(implicit sys: ActorSystem): Route = ???
}

// in OrderRoutes.scala
object OrderRoutes {
  def route(implicit sys: ActorSystem): Route = ???
}

在你的应用程序中,你有一个隐式的演员系统,然后你就可以保持val route = UserRoutes.route ~ OrderRoutes.route不变。
如果必须使用某些服务,通常会使用类

class UserRoutes(auth: AuthService, profile: ProfileService)(implicit sys: ActorSystem) {
    val route : Route = ???
}

相关问题