1

我正在使用 akka 集群并尝试为不同的环境设置两个不同的配置。

  • 一个用于我的本地设置,我将使用种子节点来启动我的应用程序
  • 两个用于我的生产 Kubernetes 设置。

我尝试了来自 Akka 的 Config Docs,其中提到了 conf 文件中的-Dconfig.resource=/dev.confand include application,但它仍然不断要求akka.discovery.methodinapplication.conf

下面是我的两个配置文件:

应用程序.conf

akka {
  log-config-on-start = off

  stdout-loglevel = "DEBUG"
  loglevel = "INFO"
  loggers = ["akka.event.slf4j.Slf4jLogger"]
  logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"

  log-dead-letters = on
  log-dead-letters-during-shutdown = off

  actor {
    provider = "cluster"
  }


  cluster {
    down-removal-margin = 7s

    sharding {
      least-shard-allocation-strategy {
        rebalance-threshold = 1

        max-simultaneous-rebalance = 5
      }
    }
  }
}

akka.http.server.idle-timeout = 900s
akka.http.client.idle-timeout = 900s

应用程序-seed.conf

include "application"

akka {

  actor {
    provider = "cluster"
    serializers {
      jackson-json = "akka.serialization.jackson.JacksonJsonSerializer"
    }
  }

  discovery.method = config

  remote.artery {
    canonical {
      hostname = "127.0.0.1"
      port = 2551
    }
  }

  cluster {
    seed-nodes = [
      "akka://MyCluster@127.0.0.1:2551"]
  }
}

当我使用参数运行代码时:

-D config.resource=/application-seed.conf

它向我抛出了错误:

中未配置默认服务发现实现akka.discovery.method。确保将此设置配置为您的首选实现,例如 application.conf 中的“akka-dns”(来自 akka-discovery 模块)。

以前有人做过这种设置吗?

4

1 回答 1

0

这看起来像您的值application-seed.conf没有覆盖application.conf. 也就是说,两者都指定

akka {
  actor {
    provider = cluster
  }
}

但是,只有application-seed.conf发现方法可以使用。这向我暗示,它application-seed.conf没有被正确解析(或者没有覆盖前面的语句application.conf)。

让我感到震惊的一件事是,我看到https://github.com/lightbend/config/blob/master/HOCON.md#includesinclude上的关键字的 HOCON 规范指出

包含的文件必须包含对象,而不是数组。这很重要,因为 JSON 和 HOCON 都允许将数组作为文档中的根值。

你的application.conf包含:

akka { 
  ... stuff
}
akka.http.server.idle-timeout = 900s
akka.http.client.idle-timeout = 900s

哪个可以解释为数组?我不确定他们在这里的意思是“数组”是指仅在文件内容中(例如,您拥有的三元素数组)还是在完全解析的配置对象中(akka.http.正在合并到主akka对象中。

于 2020-04-29T00:07:21.717 回答