在 运行 时间获取 Akka HTTP 版本

Obtain version of Akka HTTP at run time

我的服务器建立在 Akka HTTP 之上。如果我不设置 Server header,外部可配置的默认值 akka-http/10.1.8 将由 Akka 自动添加。我知道如何通过在我的整个路由树周围添加 respondWithHeaders 指令来用我自己的服务器覆盖它:

   respondWithHeaders(Server(myProductVersion)) {
      // my routs here
   }

这按预期工作;服务器响应 header 现在读取我的产品。不过,我想要的是也包括 akka 的 header,因为我喜欢它并且不介意向全世界介绍我的服务器堆栈。鉴于 Server.apply 方法的签名,我应该能够这样做:

   respondWithHeaders(Server(myProductVersion, akkaProductVersion)) {
      // my routs here
   }

...我的问题是我不知道如何做到这一点 akkaProductVersion object!

尝试像这样阅读akka.http.version配置属性

system.settings.config.getString("akka.http.version")

所以你可以试试

Server(
  myProductVersion, 
  system.settings.config.getString("akka.http.version")
)

根据default configuration

    # The default value of the `Server` header to produce if no
    # explicit `Server`-header was included in a response.
    # If this value is the empty string and no header was included in
    # the request, no `Server` header will be rendered at all.
    server-header = akka-http/${akka.http.version}

我们可以看到akka-http在构造ServerSettings时如何读取server-header here:

c.getString("server-header").toOption.map(Server(_)),