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

时间:2017-02-06 00:44:02

标签: akka-http

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

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

1 个答案:

答案 0 :(得分:6)

如果您查看setting-tv.json signature,则需要隐式singleRequest(因此Materializer及其dispatchers)才能运行基础HTTP基础设施 - 基于Akka Streams。有关物化者如何在幕后产生线程的更多知识可以在docsblogpost中找到。

回到你的问题:

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

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

  3. 如果您确实需要使用自定义程序来使用自定义调度程序,则可以通过自定义ActorSystem来实现此目的,例如

    ActorMaterializerSettings