具有多种路由配置的akka​​-http

el *_*00b 11 scala akka-http

快速背景

我正在通过一些示例来学习Akka HTTP堆栈以创建新的REST项目(完全非UI).我一直在使用和扩充Akka HTTP微服务示例来处理大量用例和配置,并对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"))
}
Run Code Online (Sandbox Code Playgroud)

routes参数仅具有使用在其内的典型数据的简单值path,pathPrefix

问题

有没有办法在多个Scala文件或某个地方设置路由?

我真的希望能够定义一组类来分离关注点并处理Actor设置和处理以处理应用程序的不同区域,并将编组保留到根App扩展.

对于我如何使用像@javax.ws.rs.Path("/whatever")我的类这样的注释在Java中做事情,我可能会想太多.如果是这种情况,请随时指出思维方式的变化.

我试图寻找一些不同的组关键字,但相信我问错了问题(例如,1,2).

mgo*_*osk 21

问题1 - 在多个文件中组合路线

您可以非常轻松地组合来自多个文件的路线.

FooRouter.scala

object FooRouter {
   val route = path("foo") {
       complete {
          Ok -> "foo"
       } 
   }       
}
Run Code Online (Sandbox Code Playgroud)

BarRouter.scala

object BarRouter {
   val route = path("bar") {
       complete {
          Ok -> "bar"
       } 
   }       
}
Run Code Online (Sandbox Code Playgroud)

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"))
}
Run Code Online (Sandbox Code Playgroud)

在这里你有一些文档:

问题2 - 分离路由,编组等

是的,您可以分离路由,编组和应用程序逻辑.这里有激活器示例:https://github.com/theiterators/reactive-microservices

问题3 - 使用注释处理路线

我不知道任何允许你使用annotion在akka-http中定义路由的lib.尝试了解有关DSL路由的更多信息.这代表了一种不同的http路由方法,但它也是一种方便的工具.

  • 值得一提的是,您需要编写`import akka.http.scaladsl.server.Directives._`才能正常工作.Doc:http://doc.akka.io/docs/akka-http/current/scala/http/routing-dsl/routes.html#composing-routes (2认同)