企業開發-Akka配置文件的動態更新

1、json格式配置文件以下,細節請參考官方文檔:

默認狀況下是akka是會自動在類路徑下搜索.conf,.properties,.json格式文件並加載爲配置文件java

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

 

2、運行時重載加載項目路徑下的application.conf部分參數

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

3、運行時更換爲新的配置文件

方法1:json

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

方法2:app

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

4、運行時擴展配置

用Config提供的withFallback方法來來擴展默認的配置,好比說你的application.conf文件配置看起來以下dom

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

你新增了部分配置tcp

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

而且你須要合併新的配置進去ide

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

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

5、一文件多配置:這裏主意json配置的做用域

使用時:spa

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

配置文件:.net

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
      }
    }
  }
}

6、多文件合併

include "application"

很簡單吧。netty

7、適配器,或者說給路徑取別名,以便隱藏細節,簡化引用

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"
}
相關文章
相關標籤/搜索