企业开发-Akka配置文件的动态更新

一、json格式配置文件如下,细节请参考官方文档:

默认情况下是akka是会自动在类路径下搜索.conf,.properties,.json格式文件并加载为配置文件

akka {
  actor {
    provider = "akka.remote.RemoteActorRefProvider"
  }
  remote {
    enabled-transports = ["akka.remote.netty.tcp"]
    netty.tcp {
      hostname = "127.0.0.1"
      port = 2553
    }
  }
}

 

二、运行时重载加载项目路径下的application.conf部分参数

   private final ActorSystem system = ActorSystem.create("LocalSystem",ConfigFactory.parseString("loglevel = \"DEBUG\""));

三、运行时更换为新的配置文件

方法1:

   private final ActorSystem system = ActorSystem.create("LocalSystem",ConfigFactory.parseResources("applicationtest.conf"));

方法2:

    private final ActorSystem system = ActorSystem.create("LocalSystem",ConfigFactory.load("applicationtest.conf"));

四、运行时扩展配置

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

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

你新增了部分配置

val config=ConfigFactory.parseString("""akka.loggers = ["akka.testkit.TestEventListener"]""")
//主意下面这句,一定要
val system=ActorSystem("UniversityMessageSystem", 
                                         config.withFallback(ConfigFactory.load()))

并且你需要合并新的配置进去

println (system.settings.config.getValue("akka.arun"))

println (system.settings.config.getValue("akka.loggers"))

五、一文件多配置:这里主意json配置的作用域

使用时:

  final ActorSystem system = ActorSystem.create("akkademy",
            ConfigFactory.load().getConfig("akkademy"));

配置文件:

akkademy {
akka {
  actor {
    provider = "akka.remote.RemoteActorRefProvider"
  }
  remote {
    enabled-transports = ["akka.remote.netty.tcp"]
    netty.tcp {
      hostname = "127.0.0.1"
      port = 2553
    }
  }
}
}
remoteakkademy {
  akka {
    actor {
      provider = "akka.remote.RemoteActorRefProvider"
    }
    remote {
      enabled-transports = ["akka.remote.netty.tcp"]
      netty.tcp {
        hostname = "127.0.0.1"
        port = 2553
      }
    }
  }
}

六、多文件合并

include "application"

很简单吧。

七、适配器,或者说给路径取别名,以便隐藏细节,简化引用

akka.actor.deployment {
 
  # '/user/actorA/actorB' is a remote deployed actor
  /actorA/actorB {
    remote = "akka.tcp://sampleActorSystem@127.0.0.1:2553"
  }
  
  # all direct children of '/user/actorC' have a dedicated dispatcher 
  "/actorC/*" {
    dispatcher = my-dispatcher
  }
  
  # '/user/actorD/actorE' has a special priority mailbox
  /actorD/actorE {
    mailbox = prio-mailbox
  }
  
  # '/user/actorF/actorG/actorH' is a random pool
  /actorF/actorG/actorH {
    router = random-pool
    nr-of-instances = 5
  }
}
 
my-dispatcher {
  fork-join-executor.parallelism-min = 10
  fork-join-executor.parallelism-max = 10
}
prio-mailbox {
  mailbox-type = "a.b.MyPrioMailbox"
}

 

转载于:https://my.oschina.net/fir01/blog/719969

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值