快速背景
我正在通过一些示例学习 Akka HTTP 堆栈来创建新的 REST 项目(完全非 UI)。我一直在使用和增强Akka HTTP 微服务示例 http://www.typesafe.com/activator/template/akka-http-microservice完成了一系列用例和配置,并对 Scala 和 Akka HTTP 的工作效果感到惊喜。
当前设置
目前我有这样的配置:
object AkkaHttpMicroservice extends App with Service {
override implicit val system = ActorSystem()
override implicit val executor = system.dispatcher
override implicit val materializer = ActorMaterializer()
override val config = ConfigFactory.load()
override val logger = Logging(system, getClass)
Http().bindAndHandle(routes, config.getString("http.interface"), config.getInt("http.port"))
}
The routes
参数只是一个简单的值,其中包含使用的典型数据path
, pathPrefix
, etc.
问题
有什么方法可以在多个 Scala 文件中设置路由或在某个地方提供示例吗?
我真的希望能够定义一组类来分隔关注点并处理 Actor 设置和处理,以处理应用程序的不同区域,并将封送处理留给根App
扩大。
这可能是我对如何使用 Java 中的注释进行操作思考太多@javax.ws.rs.Path("/whatever")
在我的课堂上。如果是这样,请随时指出心态的变化。
我尝试搜索几组不同的关键字,但相信我问了错误的问题(例如,, ).
问题 1 - 合并多个文件中的路由
您可以非常轻松地组合来自多个文件的路线。
FooRouter.scala
object FooRouter {
val route = path("foo") {
complete {
Ok -> "foo"
}
}
}
BarRouter.scala
object BarRouter {
val route = path("bar") {
complete {
Ok -> "bar"
}
}
}
主路由器.scala
import FooRouter
import BarRouter
import akka.http.scaladsl.server.Directives._
import ...
object MainRouter {
val routes = FooRouter.route ~ BarRouter.route
}
object AkkaHttpMicroservice extends App with Service {
...
Http().bindAndHandle(MainRouter.routes, config.getString("http.interface"), config.getInt("http.port"))
}
这里有一些文档:
- http://doc.akka.io/docs/akka-http/current/scala/http/routing-dsl/overview.html http://doc.akka.io/docs/akka-http/current/scala/http/routing-dsl/overview.html
- http://doc.akka.io/docs/akka-http/current/scala/http/routing-dsl/routes.html http://doc.akka.io/docs/akka-http/current/scala/http/routing-dsl/routes.html
问题 2 - 单独的路由、编组等
是的,您可以分离路由、编组和应用程序逻辑。这里有激活器示例:https://github.com/theiterators/reactive-microservices https://github.com/theiterators/reactive-microservices
问题 3 - 使用注释处理路由
我不知道有什么库允许您使用注释来定义 akka-http 中的路由。尝试了解有关 DSL 路由的更多信息。这代表了一种不同的 http 路由方法,但它也是方便的工具。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)