当前位置: 首页 > 知识库问答 >
问题:

Akka HTTP客户端和Akka actor性能调优

阎成天
2023-03-14
val httpResponseFuture: Future[HttpResponse] = http.singleRequest(HttpRequest(uri = uri))

val tokenizationResponse = for {
  response <- httpResponseFuture
  body <- Unmarshal(response.entity).to[String]
} yield transformResponse(response.status, body, path, response.headers)
akka {

    actor.deployment {
      /HttpClient {
        router = balancing-pool
        nr-of-instances = 7
      }
    }

    http {
      host-connection-pool {
        max-connections = 30
        max-retries = 5
        max-open-requests = 8192
        pipelining-limit = 200
        idle-timeout = 30 s
      }
    }

}

我们尝试在host-connection-pool下调整池、actor实例和所有其他参数的大小,但没有更好的效果。

欢迎任何建议!

共有1个答案

冉子石
2023-03-14

不混合匹配并发(&M)

您的查询功能可能只是向执行元发送一条消息并等待响应:

//what your code may look like now

object Message

val queryActorRef : ActorRef = ???

val responseBody : Future[String] = (queryActorRef ? Message).mapTo[String]

但这是不必要的。在此用例中使用actor的唯一原因是保护有限的资源。但底层http连接池为您处理资源利用问题。删除Actor中介将允许您单独使用Futures:

val entityTimeout : FiniteDuration = 10.seconds

val responseBodyWithoutAnActor : Future[String] = 
    http
      .singleRequest(HttpRequest(uri = uri))
      .flatMap(response => response.entity.toStrict(timeout))
      .map(_.data.utf8String)
type Message = ???

val messagesSource : Iterable[Message] = ???

val uri : String = ???

val poolClientFlow = Http().cachedHostConnectionPool[Promise[HttpResponse]](uri)

val entityParallelism = 10

Source
  .apply(messagesSource)
  .via(poolClientFlow)
  .mapAsync(entityParallelism)(resp.entity.toStrict(entityTimeout).data.utf8String)
  .runForeach { responseBody : String =>
    //whatever you do with the bodies
  }
 类似资料:
  • 我正在尝试将我的应用程序从apache http组件客户端切换到异步版本。目标是能够处理更多的出站连接(在不久的将来)。请求的负载非常小( 与同步版本的apache超文本传输协议客户端,通过把大约200请求/秒。平均响应时间约为100ms/请求。我在最大180ms后中止请求。 切换到异步后,响应时间增加了20ms/请求。吞吐量也降低到160/秒。中止的请求数量增加了一倍。 这是在对应用程序进行了很

  • 我有一个Web服务,我试图使用以下客户端代码调用它: 在服务器端(Tomcat),webservice实现如下: CxfAdd。java: CxfAddImpl。java: 但是,当我运行客户端代码时,在服务器端我得到以下错误: 似乎我没有发送ws-addressing属性,有人能帮我找出代码中的错误或缺失吗?非常感谢。

  • 通过 DBGp 可以支持调试功能,DGBp 是一种常见的支持多语言和调试器 UI 通信的调试器协议。请参阅交互式调试了解更多细节。在这个页面中列出了一些与 AutoHotkey 兼容的 UI 或“客户端”。 SciTE4AutoHotkey SciTE4AutoHotkey 是一个免费的基于 SciTE 的 AutoHotkey 脚本编辑器. 除了 DBGp 支持, 它还为 AutoHotkey

  • 客户端交互性 所有的WebDAV客户端分为三类—独立应用程序,文件浏览器扩展或文件系统实现,这些分类定义了WebDAV用户可用的功能性。表 C.1 “常用WebDAV客户端”给WebDAV常见软件进行了分类,并提供了的简短描述。 表 C.1. 常用WebDAV客户端 软件 类型 Windows Mac Linux 描述 Adobe Photoshop 独立的WebDAV应用程序 X 图像编辑软件,

  • 2)如果瘦客户机和服务器驻留在不同的主机上,将500个条目保存到两个缓存中需要大约4分钟,这看起来非常糟糕。 即使我们考虑到一些网络延迟,我也无法证明在case2(我们希望采用的实现模式)中这种显著的延迟是合理的。我想知道这是否与我的缓存配置有关,如下所示? 瘦客户端代码: }

  • 客户端模块是一个较复杂的模块,这里包含了集群管理、路由、地址管理器、连接管理器、负载均衡器,还与代理、注册中心等模块交互。