欢迎关注Hadoop、Spark、Flink、Hive、Hbase、Flume等大数据资料分享微信公共账号:iteblog_hadoop
  1. 文章总数:961
  2. 浏览总数:11,487,996
  3. 评论:3873
  4. 分类目录:103 个
  5. 注册用户数:5844
  6. 最后更新:2018年10月17日
过往记忆博客公众号iteblog_hadoop
欢迎关注微信公众号:
iteblog_hadoop
大数据技术博客公众号bigdata_ai
大数据猿:
bigdata_ai

Akka学习笔记:ActorSystem(配置)

  正如我们在前面看到的几篇文章,我们可以用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,并自动的加载他们。所以这段代码

val system=ActorSystem("UniversityMessagingSystem")  

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

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

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

A、重载默认的配置

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

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

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

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

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

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

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

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

B、扩展默认的配置

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

akka{  
    loggers = ["akka.event.slf4j.Slf4jLogger"]
    loglevel = DEBUG
    arun="hello"
}

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

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

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

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

重要的事项

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

config.withFallback(ConfigFactory.load())  

可以工作,但是

ConfigFactory.load().withFallback(config)  

不可以。

本博客文章除特别声明,全部都是原创!
转载本文请加上:转载自过往记忆(https://www.iteblog.com/)
本文链接: 【Akka学习笔记:ActorSystem(配置)】(https://www.iteblog.com/archives/1164.html)
喜欢 (12)
分享 (0)
发表我的评论
取消评论

表情
本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!
(4)个小伙伴在吐槽