Akka工具(二)—Future

本文详细介绍了Akka中的Future,用于处理并发执行结果的数据结构。通过同步和异步方式,如Await.result和回调方法,来处理Actor消息。重点讲解了Future的map和fold函数,用于数据处理和计算。建议在实际应用中,优先选择异步方式以提升系统性能。
摘要由CSDN通过智能技术生成

       Future被Akka设计用来处理并发执行结果的数据结构,我们可以通过同步(阻塞)或异步(非阻塞)的方法接受结果。使用Future,我们可以在Actor外部获取某个Actor的消息,在介绍Actor消息发送方式时,我们进行过简单介绍,现在我们先来回忆一下Future的常规用法。

    Future消息处理

       ask发送消息会返回一个Future对象,通过该对象我们可以同步或异步方式处理Actor返回的结果消息。同步方式主要依赖Await类的方法阻塞等待返回值,异步方式则依靠Future对象提供的诸多回调方法。使用ask方法时,我们最好设置一个超时时间,否则一直阻塞严重影响系统的吞吐率和性能。

同步方式代码示例:

public class FutureActor extends AbstractActor {

    public static void main(String[] args) {
        ActorSystem system = ActorSystem.create("system");
        ActorRef futureActor = system.actorOf(Props.create(FutureActor.class), "futureActor");
        Timeout timeout = new Timeout(Duration.create(2, TimeUnit.SECONDS));
        Future<Object> future = Patterns.ask(futureActor, "wait access message", timeout);
        try {
            String reply = (String) Await.result(future, timeout.duration());
            System.out.println("回复的消息: " + reply);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public Receive createReceive() {
        return receiveBuilder().matchAny(other -> {
            System.out.println("接受的消息:" + other);
            //模拟超时操作
            // Thread.sleep(3000);
            getSender().tell("access", getSelf());
        }).build();
    }
}

       我们首先定义Timeout用于限制超时,然后使用Patterns.ask给futureActor发送异步请求,返回一个Future对象,该对象封装了futureActor返回的消息,之前我们说过处理消息有两种方式:同步和异步,代码中采用Await.result(同步方式),表明我们

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值