Akka actor path_ActorSelection

本文通过示例代码展示了如何在 Akka 框架中使用 ActorSelection 进行 Actor 的查找与消息传递,包括绝对路径和相对路径的选择方式,并演示了父级 Actor 如何与子级 Actor 交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Akka actor path_ActorSelection


如下代码示例,

package com.usoft4;

import akka.actor.ActorSelection;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.actor.UntypedActor;

public class LookupActor extends UntypedActor {

    @Override
    public void preStart() {
        // 创建一个名为child的子actor
        getContext().actorOf(Props.create(ChildActor.class), "child");

        ActorSelection child = this.getContext().actorSelection("akka://mySystem/user/service/child");
        child.tell("from parent 1", null);
        // 使用相对路径
        child = this.getContext().actorSelection("child");
        child.tell("from parent 2", null);

    }

    @Override
    public void onReceive(Object message) throws Exception {
        System.out.println("service 收到消息 :" + message);
    }

    public static void main(String[] args) {
        // 创建一个actor system,名为mySystem
        ActorSystem system = ActorSystem.create("mySystem");
        // 创建一个名为service的顶级actor
        system.actorOf(Props.create(LookupActor.class), "service");
        // 使用绝对路径获取service
        ActorSelection service = system.actorSelection("akka://mySystem/user/service");

        // 给service 这个actor发送消息使用的sender为null,表示没有消息可以回复给这个sender
        // Pass [[akka.actor.ActorRef$.noSender]] or `null` as sender if there is nobody to reply to
        service.tell("sss", null);
        // 使用相对路径(相对于根目录的路径)
        service = system.actorSelection("user/service");
        service.tell("fff", null);

        // 使用绝对路径获取child actor
        ActorSelection child = system.actorSelection("akka://mySystem/user/service/child");
        child.tell("sss", null);
        child = system.actorSelection("user/service/child");
        child.tell("fff", null);
        system.shutdown();
    }

    static class ChildActor extends UntypedActor {
        @Override
        public void onReceive(Object message) throws Exception {
            System.out.println("child 收到消息: " + message);
        }
    }

}

===================END===================

转载于:https://my.oschina.net/xinxingegeya/blog/366588

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值