翻译:AKKA笔记 - Actor消息 -1(一)

简介: 从第一篇Akka笔记的介绍中,我们是从很高的高度去观察Akka工具箱中的Actors。在这篇笔记的第二篇,我们会看一下Actors中的消息部分。

从第一篇Akka笔记的介绍中,我们是从很高的高度去观察Akka工具箱中的Actors。在这篇笔记的第二篇,我们会看一下Actors中的消息部分。而且延续上一次的例子,我们还会使用同样的学生与老师的例子。

在Actor消息的第一部分,我们会建立一个Teacher Actor,而且会使用一个叫StudentSimulatorApp的主程序。

回顾学生-老师模式的细节

现在考虑下StudentSimulatorApp单独发消息给TeacherActor。当我说到StudentSimulatorApp,就只是意思是一个常规的带main函数的主程序。

这里写图片描述

这张图传递的意思是:
(如果太复杂,别担心,我们会详细过一遍)
1.学生创建了一个叫ActorSystem的东西
2.它用ActorSystem来创建一个叫ActorRef的东西。QuoteRequest消息被发送到ActorRef(一个TeacherActor的代理)
3.Actor ref同样把消息发给Dispatcher
4.Dispatcher将消息放入到目标Actor的邮箱中(MailBox
5.Dispatcher将Mail放到一个线程中(下节详细介绍)
6.MailBox取出一个消息并且最后将消息送给实际的Teacher Actor的接收方法。

就像我说的,别担心。下面我们看看每一步的细节。你可以在后面重新回来看下这五步。

STUDENTSIMULATORAPP程序

我们用StudentSimulatorApp启动JVM并且初始化ActorSystem。
这里写图片描述

就像图片上画的,这个StudentSimulatorApp
1.创建了一个ActorSystem
2.使用ActorSustem创建了一个Teacher Actor的代理(ActorRef)
3.给代理发送QuoteRequest(请求格言)消息。

让我们一起看下这三点。

1.创建 一个ActorSystem

ActorSystem是一个进入Actor世界的入口点。ActorSystem在创建和停止Actors的时候自始至终都存在着。并且在关掉整个Actor环境的时候也存在着。

在另一个方面,Actors是按层级划分的,ActorSystem可以类比为对于所有Actor的java.lang.Object基类对象或者scala.Any- 意思是它是所有Actors的根对象。当你用ActorSystem的actorof方法创建了一个Actor对象,你实际上创建了一个ActorSystem下一个一个子Actor。
这里写图片描述

初始化ActorSystem的代码类似于这个样子

val system=ActorSystem("UniversityMessageSystem")

这里的UniversityMessageSystem就是一个你给ActorSystem的昵称。

2.创建一个TeacherActor的代理?

让我们看下下面的片段:

‘val teacherActorRef:ActorRef=actorSystem.actorOf(props[TeacherActor])’

actorOf是ActorSystem中的Actor的创建方法。但是,你可以看见这个方法并不返回一个TeacherActor。它返回一个类型是ActorRef的东西。

ActorRef是一个真实Actors的代理。客户端并不直接跟Actor对话。这这种Actor的模型是为了防止TeacherActor的自定义/私有方法或变量被直接访问。

你只会直接给ActorRef发送消息并且消息最终会到达实际的Actor。你永远不能直接跟Actor交互。要是你找到一些方式干这个,你会被大家诅咒。
这里写图片描述

3.给代理发送一个QuoteRequest

你只需要将QuoteRequest消息tell告诉ActorRef。这个告诉的方法在Actor里面是叹号。(ActorRef也有一个tell方法,作用是委托回调给

‘//send a message to the Teacher Actor’
‘teacherActorRef!QuoteRequest’

这就没了!

如果你觉得我骗你,下面是StudentSimulatorApp的代码:

STUDENTSIMULATORAPP.SCALA

package me.rerun.akkanotes.messaging.actormsg1

import akka.actor.ActorSystem  
import akka.actor.Props  
import akka.actor.actorRef2Scala  
import me.rerun.akkanotes.messaging.protocols.TeacherProtocol._


object StudentSimulatorApp extends App{

  //Initialize the ActorSystem
  val actorSystem=ActorSystem("UniversityMessageSystem")

  //construct the Teacher Actor Ref
  val teacherActorRef=actorSystem.actorOf(Props[TeacherActor])

  //send a message to the Teacher Actor
  teacherActorRef!QuoteRequest

  //Let's wait for a couple of seconds before we shut down the system
  Thread.sleep (2000) 

  //Shut down the ActorSystem.
  actorSystem.shutdown()

} 

不过,我确实撒了一个小慌。你需要shutdown ActorSystem或者让JVM一直跑。我给这个main线程sleep一下只是为了给TeacherActor一点时间来完成它的任务。我知道这听起来有点傻。别担心这个。我们后面会写一些测试用例来避免这个。

这是我翻译的文章,原文在http://rerun.me/2014/09/19/akka-notes-actor-messaging-1/


文章来自微信平台「麦芽面包」,微信号「darkjune_think」。转载请注明。
这里写图片描述

目录
相关文章
|
Java 数据库连接 Maven
IDEA下Maven骨架(archetype)搭建
通过Maven生成骨架(通用项目目录结构)流程记录
2169 1
|
2月前
|
SQL 自然语言处理 文字识别
阿里云百炼知识库(Knowledge Studio):迈入 Agentic RAG 4.0时代
阿里云百炼Knowledge Studio(RAG 4.0)推出独立 Rag Agent服务,提供 Agentic Search + Agentic Generation 闭环方案。面向企业全模态多知识库场景,真正做到复杂知识搜得到、答得好、引用看得见。
968 2
|
6月前
|
SQL Java API
Agent 越用越聪明?AgentScope Java 在线训练插件来了!
使用AgentScope Java + Trinity-RFT 在线训练优化你的Agent,让你的Agent边运行边进化。
1566 45
|
8月前
|
人工智能 安全 Java
Java 开发者福音:无影 AgentBay 官方 Java SDK 正式发布,无缝集成 Spring AI 与 LangChain4j
阿里云无影AgentBay推出Java SDK,助力Java应用安全接入AI Agent。通过云端沙箱隔离执行环境,解决本地执行的安全、并发与依赖难题,支持Spring AI、LangChain4j等主流框架,实现高并发、可扩展的智能体开发。
1072 6
|
9月前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
5995 80
|
人工智能 Java Serverless
【MCP教程系列】搭建基于 Spring AI 的 SSE 模式 MCP 服务并自定义部署至阿里云百炼
本文详细介绍了如何基于Spring AI搭建支持SSE模式的MCP服务,并成功集成至阿里云百炼大模型平台。通过四个步骤实现从零到Agent的构建,包括项目创建、工具开发、服务测试与部署。文章还提供了具体代码示例和操作截图,帮助读者快速上手。最终,将自定义SSE MCP服务集成到百炼平台,完成智能体应用的创建与测试。适合希望了解SSE实时交互及大模型集成的开发者参考。
15605 60
|
7月前
|
存储 决策智能 Docker
AgentScope 正式发布 Skills 支持 - 实现渐进式披露
Skill机制提出“渐进式披露”上下文管理新范式:启动时仅加载元数据(轻量),触发时按需加载完整SOP指令(精准),执行时动态调用资源或脚本(完整)。有效解决多能力Agent在空间、时间、结构三维度的上下文浪费与碎片化难题,兼顾扩展性、准确性和可维护性。
AgentScope 正式发布 Skills 支持 - 实现渐进式披露
|
人工智能 机器人 开发者
AppFlow:为您的任意模型赋能——RAG
随着大语言模型参数规模的增加,微调成本高昂,知识检索增强方式逐渐成为主流。通过预置知识库,在模型推理前检索相关知识作为上下文,提升领域知识准确性和专业性。AppFlow现支持百炼知识库,无需额外开发,只需简单配置即可为任意模型提供RAG能力,适用于多种触发器,如钉钉机器人等。通过选择模型、配置RAG组件,并将结果发送回钉钉,轻松实现专业知识增强的回答。
1201 2
AppFlow:为您的任意模型赋能——RAG