如何为 Http().bindAndHandle 组合不同的路由?

How to combine different routes for Http().bindAndHandle?

我的应用程序结构看起来像

com.app.service/
                EmailService.scala
                MonitorStatusService.scala
Server.scala

EmailService.scala

trait EmailService extends EmailProtocols {
  implicit val materializer: Materializer
  private val ecStatusResponse = ECStatus("ok", "Welcome to Server")

  val emailRoutes =
    logRequestResult("email-service") {
      pathPrefix("ec") {
        (post & entity(as[ECFailure])) { ecFailure =>
          complete {
            Postman.send(TenantFailure(ecFailure.symbolicName) getMessage)
            "OK"
          }
        }
      } ~
        path("") {
          get {
            complete {
              ecStatusResponse
            }
          }
        }
    }
}

MonitorStatusService.scala

trait MonitorStatusService extends EmailProtocols {
  implicit val materializer: Materializer
  private val ecStatusResponse = ECStatus("ok", "Welcome to Monitor Service")

  val monitorRoutes =
    logRequestResult("monitor-service") {
      pathPrefix("monitor") {
        (post & entity(as[ECFailure])) { ecFailure =>
          complete {
            Postman.send(TenantFailure(ecFailure.symbolicName) getMessage)
            "OK"
          }
        }
      } ~
        path("") {
          get {
            complete {
              ecStatusResponse
            }
          }
        }
    }
}

Server.scala

object Server extends App
with EmailService
with MonitorStatusService {
  var config: Option[Config] = None
  if (args.length > 0) {
    config = Some(ConfigFactory.parseFile(new File(args(0) trim)))
    println(config)
  }

  val host = if (config.isDefined) config.get.getString("server.host").toString else "localhost"
  val port = if (config.isDefined) config.get.getString("server.port").toInt else 8080

  implicit val system = ActorSystem("server")
  val executor = system.dispatcher
  implicit val materializer = ActorMaterializer()
  println(s"Starting server on ($host, $port)")
  Http().bindAndHandle(emailRoutes, host, port)
}

我需要什么? 我想绑定多个路由,比如

Http().bindAndHandle(emailRoutes + monitorRoutes, host, port)

但是当我这样做时,我看到错误

我该怎么办?

与您使用 ~ 在两个对象下合并路由的方式相同。 所以将 + 更改为 ~.

虽然没有检查这个,但这是它过去在喷雾下的工作方式,所以它应该在这里。