如何为 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)
但是当我这样做时,我看到错误
我该怎么办?
与您使用 ~
在两个对象下合并路由的方式相同。
所以将 +
更改为 ~
.
虽然没有检查这个,但这是它过去在喷雾下的工作方式,所以它应该在这里。
我的应用程序结构看起来像
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)
但是当我这样做时,我看到错误
我该怎么办?
与您使用 ~
在两个对象下合并路由的方式相同。
所以将 +
更改为 ~
.
虽然没有检查这个,但这是它过去在喷雾下的工作方式,所以它应该在这里。