Akka学习笔记(七):配置

简介: <div style="margin:0px; padding:0px; border:0px; line-height:1.6; font-family:'Helvetica Neue',Arial,'Hiragino Sans GB',STHeiti,'Microsoft YaHei','WenQuanYi Micro Hei',SimSun,Song,sans-serif; font


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() 的简写

未完待续


目录
相关文章
|
缓存 NoSQL Java
分布式锁有哪些应用场景和实现?
电商网站都会遇到秒杀、特价之类的活动,大促活动有一个共同特点就是访问量激增,在高并发下会出现成千上万人抢购一个商品的场景。虽然在系统设计时会通过限流、异步、排队等方式优化,但整体的并发还是平时的数倍以上,参加活动的商品一般都是限量库存,如何防止库存超卖,避免并发问题呢?分布式锁就是一个解决方案。
1029 0
|
监控 Linux 网络安全
百度搜索:蓝易云【CentOS7上安装Squid代理详细教程【附带使用教程】】
通过以上步骤,你已经成功安装和配置了Squid代理服务器,并且可以在客户端设备或应用程序中使用它进行代理访问。根据需要,你可以进一步定制Squid的配置,例如添加更多的访问控制规则或进行高级功能的配置。请注意,Squid还有许多其他的功能和选项,你可以参考Squid的官方文档以获取更详细的信息和配置指南。
1073 0
|
API 索引
es实战-分片分配失败解决方案
分片无法分配情况的一些解决办法
3533 0
|
3月前
|
人工智能 安全 测试技术
阿里云JVS Claw是什么?JVS Claw能力、部署方式与部署流程参考
阿里云推出的AI智能体平台JVS Claw,基于OpenClaw框架打造,定位为"执行型智能体",解决了传统AI助手"只会说不会做"的痛点。JVS Claw支持云端与本地双部署模式,云端环境安全隔离、7×24小时在线,本地模式数据可控。产品提供体验版(7天免费)、匠心版(39元/月起)、大师版三档方案,适用于办公提效、代码开发、团队协作等场景。用户可通过自然语言指令驱动Clawbot执行邮件处理、代码生成、自动化测试等复杂任务,并支持自定义Skill扩展能力。39元/月起的定价大幅降低了AI Agent的使用门槛。
|
机器学习/深度学习 数据采集 人工智能
机器学习实战 | 自动化特征工程工具Featuretools应用
本篇讲解使用自动化特征工程工具Featuretools,对数据进行自动化特征工程的方法,并借助于BigMart Sales数据集来演示自动化特征工程的相关应用。
2498 0
机器学习实战 | 自动化特征工程工具Featuretools应用
|
3月前
|
人工智能 缓存 Java
Microsoft大规模取消 Claude Code 授权,内部强制向 Copilot CLI 迁移
本文实测对比Claude Code、Cursor与Copilot在2.8万行Java遗留系统重构中的表现:Claude Code凭借Dreaming机制与自我审查能力,以更低Token消耗(4.2万)、更短交互时间(18分钟)和更高代码质量胜出;Cursor适合日常编辑但易陷局部最优;Copilot在复杂跨服务Agentic任务中力不从心。结论:Agentic Coding时代胜负手在于规划-执行-验证-进化闭环能力,而非单纯模型参数。
230 0
|
算法 测试技术 Swift
Kimi开源Moonlight-16B-A3B:基于Muon优化器的高效大模型,性能与训练效率双突破!
Kimi开源Moonlight-16B-A3B:基于Muon优化器的高效大模型,性能与训练效率双突破!
814 5
|
安全 前端开发 网络安全
2025年最受欢迎的CMS系统。
在2025年,国内知名CMS系统PageAdmin CMS、国外博客程序Wordpress、PHP论坛系统discuz和电子商务商城系统PrestaShop将为用户提供强大、灵活、易用的CMS管理系统。
1176 63
|
存储 人工智能 自然语言处理
AI Agent与SaaS工具协同发展的未来:企业智能化的全新范式
AI Agent以自主性和智能化为核心,适合复杂任务的动态执行;而SaaS工具则注重服务的完整性和易用性,适合标准化业务需求。
1470 14
AI Agent与SaaS工具协同发展的未来:企业智能化的全新范式
|
机器学习/深度学习 数据采集 自然语言处理
python之pip安装第三方库
python之pip安装第三方库
1363 121
python之pip安装第三方库