Akka學習筆記(七):配置
Akka學習筆記(七):配置
使用Akka可以不用任何配置,Akka提供了明智的默認配置。為了適應特別的運行環境,修改默認行為,你可能需要修改:
- log level and logger backend
- enable remoting
- 消息係列化
- 路由設置
- 調度器調優
Akka使用Typesafe Config Library,純java實現的配置庫。之前博客有介紹過here
從哪裏讀取配置
Akka的所有配置信息裝在 ActorSystem的實例中, 或者換個說法, 從外界看來, ActorSystem 是配置信息的唯一消費者. 在構造一個actor係統時,你可以傳進來一個 Config object,如果不傳,就相當於傳進來 ConfigFactory.load() (使用正確的classloader). 這意味著將會讀取classpath根目錄下的所有application.conf
,
application.json
and
application.properties
這些文件—請參閱之前推薦的文檔以了解細節. 然後actor係統會合並classpath根目錄下的 reference.conf 來組成其內部使用的缺省配置
appConfig.withFallback(ConfigFactory.defaultReference(classLoader))
其中的哲學是代碼不包含缺省值,而是依賴於隨庫提供的 reference.conf 中的配置.
係統屬性中覆蓋的配置具有最高優先級,見 HOCON 規範 (靠近末尾的位置). 要提醒的是應用配置—缺省為 application—可以使用 config.resource 中的屬性來覆蓋 (更多細節參閱 配置文檔).
注意
如果你編寫的是一個Akka應用,把配置放在classpath根目錄下的 application.conf 中. 如果你編寫的是一個基於Akka的庫,把配置放在jar包根目錄下的 reference.conf 中.
When using JarJar, OneJar, Assembly or any jar-bundler
警告
Akka會讀取所有jar包的reference.conf配置,所以如果你把多個jar包合並成一個jar,那麼你也必須合並這些reference.conf,否則默認配置會丟失,導致Akka不能正常工作
Custom application.conf
一個application.conf
可能看起來是這樣:
# 你可以在這個配置文件中覆蓋掉reference files的配置.
# Copy in parts of the reference files and modify as you please.
akka {
# Loggers to register at boot time (akka.event.Logging$DefaultLogger logs
# to STDOUT)
loggers = ["akka.event.slf4j.Slf4jLogger"]
# 日誌級別
# as they have been started; before that, see "stdout-loglevel"
# Options: OFF, ERROR, WARNING, INFO, DEBUG
loglevel = "DEBUG"
# Log level for the very basic logger activated during ActorSystem startup.
# This logger prints the log messages to stdout (System.out).
# Options: OFF, ERROR, WARNING, INFO, DEBUG
stdout-loglevel = "DEBUG"
actor {
provider = "akka.cluster.ClusterActorRefProvider"
default-dispatcher {
# Throughput for default Dispatcher, set to 1 for as fair as possible
throughput = 10
}
}
remote {
# The port clients should connect to. Default is 2552.
netty.tcp.port = 4711
}
}
包含文件
可以將配置include進來。比如有一個通用的環境配置application.conf
,我們隻需要覆蓋掉其中的個別變量,以滿足特殊環境的需求
通過-Dconfig.resource=/dev.conf
加載dev.conf
配置文件,這個配置文件會加載application.conf
dev.conf:
include "application"
akka {
loglevel = "DEBUG"
}
更高級的包含和替換機製在 HOCON 規範中有解釋.here
配置日誌
如果係統屬性或配置屬性 akka.log-config-on-start 設置為 on, 那麼當actor係統啟動時整個配置的日誌級別為INFO. 這在你不確定使用哪個配置時會有用。
如果有疑問,你也可以在用它們構造一個actor係統之前或之後很方便地了解配置對象的內容:
Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_27).
Type in expressions to have them evaluated.
Type :help for more information.
scala> import com.typesafe.config._
import com.typesafe.config._
scala> ConfigFactory.parseString("a.b=12")
res0: com.typesafe.config.Config = Config(SimpleConfigObject({"a" : {"b" : 12}}))
scala> res0.root.render
res1: java.lang.String =
{
# String: 1
"a" : {
# String: 1
"b" : 12
}
}
每一條設置之前的注釋給出了原有設置的詳情信息 (文件和行號) 以及(e.g. 在參考配置中)可能出現的注釋,與參考配置合並並被actor係統解析的設置可以這樣顯示:
final ActorSystem system = ActorSystem.create();
println(system.settings());
// 這是 system.settings().config().root().render() 的簡寫
未完待續
最後更新:2017-04-03 05:39:44