配置文件Akka集群

配置文件Akka集群,akka,akka-cluster,typesafe-config,hocon,Akka,Akka Cluster,Typesafe Config,Hocon,我正在使用akka群集,并尝试为不同的环境设置两种不同的配置 一个用于我的本地设置,我将使用种子节点启动我的应用程序 两个用于我的生产Kubernetes设置 我试过在conf文件中提到-Dconfig.resource=/dev.conf和包含应用程序,但它仍然在应用程序.conf中不断要求akka.discovery.method 下面是我的两个配置文件: application.conf akka { log-config-on-start = off stdout-logl

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

  • 一个用于我的本地设置,我将使用种子节点启动我的应用程序
  • 两个用于我的生产Kubernetes设置
我试过在conf文件中提到
-Dconfig.resource=/dev.conf
包含应用程序
,但它仍然在
应用程序.conf
中不断要求
akka.discovery.method

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

application.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
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"]
  }
}
应用程序seed.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
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发现模块)


以前有人做过这种设置吗

这看起来像是
应用程序seed.conf
中的值没有覆盖
应用程序.conf
中的值。也就是说,两者都指定

akka {
  actor {
    provider = cluster
  }
}
但是,只有
应用程序seed.conf
可以使用发现方法。这向我暗示是
application seed.conf
未正确解析(或未覆盖
application.conf
中的早期语句)

我突然想到的一件事是,我看到
include
关键字的HOCON规范声明

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

您的
application.conf
包含:

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

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

这看起来像是
应用程序seed.conf
中的值没有覆盖
应用程序.conf
中的值。也就是说,两者都指定了

akka {
  actor {
    provider = cluster
  }
}
但是,只有
application seed.conf
具有要使用的发现方法。这向我暗示,未正确解析的是
application seed.conf
(或未覆盖
application.conf
中的早期语句)

我突然想到的一件事是,我看到
include
关键字的HOCON规范声明

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

您的
application.conf
包含:

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

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

这应该会起作用,也许
应用程序seed.conf
不会在类路径上的位置结束?可以调试的一件事是在
application.conf
中启用
akka.log-config-on-start=on
,并查看是否有g如果有任何提示。那应该可以,也许
应用程序seed.conf
不会在类路径上出现您认为它会出现的地方结束?您可以做的一件事是调试
应用程序.conf
中启用
akka.log-config-on-start=on
,并查看是否有任何提示。