Akka学习笔记:ActorSystem(配置)

10 篇文章 0 订阅

正如我们在前面看到的几篇文章,我们可以用ActorSystem类中的actorOf 方法来创建Actor。其实在ActorSystem中有大量的方法我们可以用,在这里我将介绍Configuration和Scheduling方法。让我们看一下ActorSystem类中的一些方法,如下图:


如果想及时了解 Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号: iteblog_hadoop

  还记得在前面我们用于配置日志输出级别的application.conf文件吗?这个配置文件和Java中的.properties文件很类似,我们马上将看到通过这个配置文件可以配置dispatchers和mailboxes 等等。
  所以当我们创建ActorSystem,用的是ActorSystem对象的apply方法,而该并没有注明任何的配置,它将在classpath中寻找 application.conf、 application.json和application.properties,并自动的加载他们。所以这段代码

1 val system=ActorSystem("UniversityMessagingSystem"

1 val system=ActorSystem("UniversityMessagingSystem", ConfigFactory.load())

  功能相同。为了证明这一点,你可以到 ActorSystem.scala中看下apply方法:

1 def apply(name: String, config: Option[Config] = None,
2               classLoader: Option[ClassLoader] = None,
3               defaultExecutionContext: Option[ExecutionContext] = None): ActorSystem = {
4     val cl = classLoader.getOrElse(findClassLoader())
5     val appConfig = config.getOrElse(ConfigFactory.load(cl))
6     new ActorSystemImpl(name, appConfig, cl, defaultExecutionContext).start()
7   }

A、重载默认的配置

  如果你不喜欢用application.conf,或者想拥有你自己的配置文件。你可以通过重载来传递你自己的配置,而不是从classpat来获取。ConfigFactory.parseString就是一种方法:

1 val actorSystem=ActorSystem("UniversityMessageSystem",
2        ConfigFactory.parseString("""akka.loggers = ["akka.testkit.TestEventListener"]""")) 

或者在你的测试用例用法如下

1 class TeacherTestLogListener extends TestKit(ActorSystem("UniversityMessageSystem",
2        ConfigFactory.parseString("""akka.loggers = ["akka.testkit.TestEventListener"]"""))) 
3   with WordSpecLike
4   with MustMatchers
5   with BeforeAndAfterAll {

  当然,你也可以用 ConfigFactory.load来实现

1 val system = ActorSystem("UniversityMessageSystem",
2                  ConfigFactory.load("uat-application.conf")) 

  如果你想在运行的时候获取你自己的配置参数,你可以通过下面的API获取

1 val system=ActorSystem("UniversityMessageSystem",
2        ConfigFactory.parseString("""akka.loggers = ["akka.testkit.TestEventListener"]""")) 
3 println (system.settings.config.getValue("akka.loggers"))
4 // Results in > SimpleConfigList(["akka.testkit.TestEventListener"])

B、扩展默认的配置

  除了重载,你也可以用Config提供的withFallback方法来来扩展默认的配置,比如说你的application.conf文件配置看起来如下

1 akka{ 
2     loggers = ["akka.event.slf4j.Slf4jLogger"]
3     loglevel = DEBUG
4     arun="hello"
5 }

  而你决定重载 akka.loggers属性,比如:

1 val config=ConfigFactory.parseString("""akka.loggers = ["akka.testkit.TestEventListener"]""")
2 val system=ActorSystem("UniversityMessageSystem",
3                                          config.withFallback(ConfigFactory.load()))

  最后你将合并两个地方的配置:

1 //> ConfigString("hello")
2 println (system.settings.config.getValue("akka.arun"))
3 //> SimpleConfigList(["akka.testkit.TestEventListener"])
4 println (system.settings.config.getValue("akka.loggers"))

重要的事项

  需要注意这里的falling back的顺序:一部分是默认的;一部分是扩展的。记住,你必须对默认的配置进行fall back。所以

1 config.withFallback(ConfigFactory.load()) 

可以工作,但是

1 ConfigFactory.load().withFallback(config) 

不可以。

本博客文章除特别声明,全部都是原创!
尊重原创,转载请注明: 转载自过往记忆(http://www.iteblog.com/)
本文链接: 【Akka学习笔记:ActorSystem(配置)】(http://www.iteblog.com/archives/1164)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值