使用 Akka Http 进行多重绑定

Using Akka Http for Multiple Bindings

考虑到 documentation,使用 akka http 绑定到端口然后路由传入连接非常容易。

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

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)

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

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

一点源代码调查显示如下。

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

这意味着您的任何一种方法都可以相同地工作,但考虑到底层系统的实际工作方式,imo 使用一种 httpExt 不会那么令人困惑。