如何自定义Akka Http Client执行上下文

Eug*_*eMi 5 akka-http

调用singleRequest时,如何自定义连接池使用的执行上下文?我简要地看了一下代码,并且调用singleRequest导致一条消息被发送到PoolMasterActor,后者又向池接口actor发送消息.

  1. 每个连接是阻塞还是非阻塞?
  2. 哪个上下文用于连接池?(我想确保我的HTTP请求不会阻止所有线程)

Ste*_*tti 6

如果签出singleRequest 签名,它需要一个隐式的Materializer(因此它ActorSystem和它的调度程序)来运行底层的HTTP基础设施 - 它基于Akka Streams.有关物化器如何在引擎盖下生成线程的更多知识可以在文档和本博文中找到.

回到你的问题:

  1. 整个Akka-HTTP基础设施本质上是非阻塞的(因为它基于Akka Streams - 它遵循Reactive Streams规范并且基于Akka Actors).

  2. singleRequest调用使用的线程继承自ActorSystem该行使用的调度程序.除非您执行任何特定操作,否则最终将使用系统的默认调度程序.在编写Akka HTTP客户端的许多情况下,这是合理的选择.

如果您确实需要使用物料生成器来使用自定义调度程序,您可以通过自定义您的实现ActorMaterializerSettings,例如

implicit val materializer = ActorMaterializer(
  ActorMaterializerSettings(actorSystem).withDispatcher("my-custom-dispatcher")
)
Run Code Online (Sandbox Code Playgroud)