我正在使用akka群集,并尝试为不同的环境设置两个不同的配置。
我尝试了conf文件中提到-Dconfig.resource=/dev.conf
和include application
的{{3}},但仍然在akka.discovery.method
中要求application.conf
下面是我的两个配置文件:
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
application-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模块)。
有人以前做过这种设置吗?
答案 0 :(得分: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#includes处include
关键字的HOCON规范指出
包含的文件必须包含一个对象,而不是数组。这很重要,因为JSON和HOCON都允许数组作为文档中的根值。
您的application.conf
包含:
akka {
... stuff
}
akka.http.server.idle-timeout = 900s
akka.http.client.idle-timeout = 900s
哪个可以解释为数组?我不确定它们的意思是“数组”是指文件内容中的含义(例如,您在那里有一个三元素数组),还是完全解析的配置对象中的{akka.http.
被合并到主{ {1}}对象。