0

0

Java开发如何配置并发模型环境_Akka Actor依赖引入与测试

P粉602998670

P粉602998670

发布时间:2026-03-15 09:45:30

|

452人浏览过

|

来源于php中文网

原创

应引入无Scala后缀的akka-actor-typed(需显式指定type=jar),配置必须使用ConfigFactory.defaultReference()或合并自定义配置,Behavior必须返回非null行为,测试须用akka-testkit-typed-junit5及proper cleanup。

java开发如何配置并发模型环境_akka actor依赖引入与测试

怎么在 Maven 项目里正确引入 Akka Actor 2.6+(Java)

Akka 2.6 起彻底移除了对 Scala 2.11/2.12 的支持,且 Java API 不再是“附属”,但默认依赖仍带 Scala 运行时——直接加 akka-actor-typed_2.13 会导致 Java 项目多出一堆无关的 scala-library 和隐式类路径冲突。

实操建议:

  • akka-actor-typed(无下划线和 Scala 版本后缀)这个纯 Java 模块,它不拉 Scala 依赖
  • Maven 坐标必须指定 <type>jar</type>,否则 Maven 可能误取到 pom-only artifact
  • 显式排除 akka-actor(旧 untyped)避免版本混用,哪怕你暂时不用 typed 模型
<dependency>
  <groupId>com.typesafe.akka</groupId>
  <artifactId>akka-actor-typed</artifactId>
  <version>2.8.5</version>
  <type>jar</type>
</dependency>

启动 ActorSystem 时为什么报 “No configuration setting found for key 'akka.actor.provider'”

这是 Akka 2.6+ 的硬性要求:不再接受空配置。哪怕只跑一个本地 actor,也必须提供基础配置,否则 ActorSystem.create() 直接抛 ConfigException

常见错误现象:

立即学习Java免费学习笔记(深入)”;

  • 只传名字如 ActorSystem.create("my-system") → 报错
  • ConfigFactory.empty() → 同样报错,empty 不等于 default

实操建议:

  • 最简解法:用 ConfigFactory.defaultReference(),它加载 reference.conf 中的全部默认值
  • 若需自定义,用 ConfigFactory.parseString("akka.actor.provider = local") 合并到 defaultReference 上,别覆盖
  • Java 代码里别手写 HOCON 字符串拼接,容易漏引号或换行——优先用 ConfigFactory.parseResources("application.conf")

写第一个 HelloActor 时,Behavior<String> 怎么响应消息又不卡死

Akka Typed 的核心是不可变行为链,onMessage 返回新 Behavior 才算处理完成;如果忘了 return 或返回了 Behaviors.same() 却没做状态更新,actor 就会静默丢弃后续消息。

小微助手
小微助手

微信推出的一款专注于提升桌面效率的助手型AI工具

下载

使用场景:

  • 简单状态机(比如连接/断开/重试)适合用 Behaviors.setup() + 闭包捕获变量
  • 需要持久化或跨 actor 共享状态?别在 Behavior 里存字段——那是反模式,该用 EventSourcedBehavior 或外部存储

简短示例(修正版):

Behavior<String> helloBehavior = Behaviors.receive((ctx, msg) -> {
  ctx.getLog().info("Received: {}", msg);
  // 必须返回一个 Behavior,不能 void,不能 null
  return Behaviors.same(); // 或 Behaviors.stopped()
});

JUnit 5 测试 Actor 时,TestKit 报 “ActorSystem is terminated”

Akka 2.6+ 废弃了旧 TestKit,Java 用户应改用 akka-testkit-typed-junit5,但直接 new TestKit 仍会触发已废弃路径,导致系统提前关闭。

性能与兼容性影响:

  • TestKit 强制同步执行,掩盖调度问题;新 TestProbe 默认异步,更贴近真实行为
  • 测试中调用 system.terminate() 是必须的,但得等它真正完成——否则 next test 会复用已关系统

实操建议:

  • TestProbe<String> probe = testKit.createTestProbe() 替代手动构造 actor
  • 发送消息后,用 probe.receiveMessage() 阻塞等待,别用 Thread.sleep()
  • @AfterEach 里写 system.terminate().toCompletableFuture().join(),确保清理干净
Akka Typed 的配置、行为建模和测试链条比传统并发模型更严格,每个环节都要求显式声明意图——不是语法难,而是容错率低。最容易被忽略的是:所有 Behavior 构造必须返回非 null 行为,哪怕只是 Behaviors.empty(),否则 actor 一收消息就静默死亡。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Java Maven专题
Java Maven专题

本专题聚焦 Java 主流构建工具 Maven 的学习与应用,系统讲解项目结构、依赖管理、插件使用、生命周期与多模块项目配置。通过企业管理系统、Web 应用与微服务项目实战,帮助学员全面掌握 Maven 在 Java 项目构建与团队协作中的核心技能。

0

2025.09.15

软件测试常用工具
软件测试常用工具

软件测试常用工具有Selenium、JUnit、Appium、JMeter、LoadRunner、Postman、TestNG、LoadUI、SoapUI、Cucumber和Robot Framework等等。测试人员可以根据具体的测试需求和技术栈选择适合的工具,提高测试效率和准确性 。

464

2023.10.13

java测试工具有哪些
java测试工具有哪些

java测试工具有JUnit、TestNG、Mockito、Selenium、Apache JMeter和Cucumber。php还给大家带来了java有关的教程,欢迎大家前来学习阅读,希望对大家能有所帮助。

315

2023.10.23

Java 单元测试
Java 单元测试

本专题聚焦 Java 在软件测试与持续集成流程中的实战应用,系统讲解 JUnit 单元测试框架、Mock 数据、集成测试、代码覆盖率分析、Maven 测试配置、CI/CD 流水线搭建(Jenkins、GitHub Actions)等关键内容。通过实战案例(如企业级项目自动化测试、持续交付流程搭建),帮助学习者掌握 Java 项目质量保障与自动化交付的完整体系。

31

2025.10.24

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1051

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

254

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1110

2024.03.01

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

761

2023.08.03

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

49

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.4万人学习

C# 教程
C# 教程

共94课时 | 11.4万人学习

Java 教程
Java 教程

共578课时 | 82.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号