我通过一些示例来学习Akka HTTP堆栈,以创建一个新的REST项目(完全非UI)。我一直在使用和扩充Akka HTTP Microservice Example,以完成大量用例和配置,并且对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"))
}
该routes
参数仅具有使用在其内的典型数据的简单值path
,pathPrefix
等
有什么方法可以在多个Scala文件中设置路由,或者在其中的某个地方设置示例?
我真的很希望能够定义一组类,以将关注点分离,并处理Actor的设置和处理,以处理应用程序的不同区域,而将封送处理留给根App
扩展。
这可能是我对如何使用类@javax.ws.rs.Path("/whatever")
上的注释在Java中进行操作的方式进行过多思考。在这种情况下,请随时指出思维方式的变化。
问题1-将路由合并到多个文件中
您可以很容易地合并来自多个文件的路由。
FooRouter.scala
object FooRouter {
val route = path("foo") {
complete {
Ok -> "foo"
}
}
}
BarRouter.scala
object BarRouter {
val route = path("bar") {
complete {
Ok -> "bar"
}
}
}
MainRouter.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"))
}
在这里,您有一些文档:
问题2-单独路由,编组等
是的,您可以将路由,编组和应用程序逻辑分开。这里有激活器示例:https : //github.com/theiterators/reactive-microservices
问题3-使用注释处理路线
我不知道任何库允许您使用注释在akka-http中定义路由。尝试了解有关DSL路由的更多信息。这代表了HTTP路由的另一种方法,但它也是方便的工具。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句