使用Akka Http进行多重绑定

时间:2016-09-08 12:48:06

标签: scala akka akka-stream akka-http

使用akka http绑定到端口然后路由传入连接很容易,因为documentation

未解决的一个问题是如何为不同的路由绑定多个端口。如果我有多个规格:

val route1 : Flow[HttpRequest, HttpResponse,_] = ???
val interface1 : String = ???
val port1 : Int = ???

val route2 : Flow[HttpRequest, HttpResponse,_] = ???
val interface2 : String = ???
val port2 : Int = ???

这些是否应与HttpExt绑定?

implicit val actorSystem : akka.actor.ActorSystem = ???

val httpExt = akka.http.scaladsl.Http()

httpExt.bindAndHandle(route1, interface1, port1)
httpExt.bindAndHandle(route2, interface2, port2)

或者,每个绑定应该使用不同的HttpExt吗?

Http().bindAndHandle(route1, interface1, port1)
Http().bindAndHandle(route2, interface2, port2)

如果其中一个有效,那么使用一种方法对另一种方法有什么影响吗?

提前感谢您的审核和回复。

1 个答案:

答案 0 :(得分:5)

一点源代码调查显示以下内容。

Here我们看到Http()来电时会发生什么。 Http对象扩展ExtensionId[HttpExt] trait,它负责向actor系统注册其他功能。 Thissuper电话。我们可以看到它使用this引用,在我们的例子中是一个对象引用(重要)。 Here是我们致电Http()时实际发生的事情。这段代码的第一件事就是检查扩展是否已经注册。请记住,在我们的案例中ext是一个对象,因此在第一个之后的任何后续调用都不会做任何事情。

这意味着你的任何一种方法都可以正常工作,但是考虑到底层系统的真正作用,使用一个httpExt的imo就不那么容易混淆了。