使用 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 系统注册额外的功能。
This 是 super
调用。正如我们所看到的,它使用了 this
引用,在我们的例子中是对象引用(重要)。
Here 是我们调用 Http()
时实际发生的事情。这段代码做的第一件事是检查扩展是否已经注册。请记住,在我们的例子中 ext
是一个对象,因此在第一个调用之后的任何后续调用都不会执行任何操作。
这意味着您的任何一种方法都可以相同地工作,但考虑到底层系统的实际工作方式,imo 使用一种 httpExt
不会那么令人困惑。
考虑到 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 系统注册额外的功能。
This 是 super
调用。正如我们所看到的,它使用了 this
引用,在我们的例子中是对象引用(重要)。
Here 是我们调用 Http()
时实际发生的事情。这段代码做的第一件事是检查扩展是否已经注册。请记住,在我们的例子中 ext
是一个对象,因此在第一个调用之后的任何后续调用都不会执行任何操作。
这意味着您的任何一种方法都可以相同地工作,但考虑到底层系统的实际工作方式,imo 使用一种 httpExt
不会那么令人困惑。