Akka java 入门【六】TimerScheduler.startTimerWithFixedDelay()的使用

startTimerWithFixedDelay(msg: T, initialDelay: java.time.Duration, delay: java.time.Duration) 是 Akka 中 TimerScheduler 接口中的一个方法,用于在给定的初始延迟时间后,以固定的时间间隔重复发送消息。

该方法包含三个参数(具体参考官方文档):

  • msg: T:指定发送的消息类型。
  • initialDelay: java.time.Duration:指定初始延迟时间,即首次发送消息的时间间隔。
  • delay: java.time.Duration:指定两次发送消息的时间间隔,即固定的时间间隔。

例如,可以通过以下方式使用 startTimerWithFixedDelay 方法:

import akka.actor.ActorSystem;
import akka.actor.AbstractActor;
import akka.actor.Props;
import akka.actor.Cancellable;
import java.time.Duration;
    
//定义了一个枚举类,作为消息类型
public enum TestMessage {
        TEST_MESSAGE
    }

public class ExampleActor extends AbstractActor {

    private final ActorSystem system = getContext().getSystem();
    private final TimerScheduler scheduler;
    private Cancellable timer;

    @Override
    public void preStart() {
        // 1 秒后开始发送消息,每 2 秒发送一次
        timer = scheduler.startTimerWithFixedDelay(TestMessage.TEST_MESSAGE, Duration.ofSeconds(1), Duration.ofSeconds(2));
    }

    @Override
    public Receive createReceive() {
        return receiveBuilder()
                .onMessage(TestMessage.class, this::onTestMessage)
                .build();
    }
    private Behavior<Message> onTestMessage(TestMessage msg){
        System.out.println("Received message");
        return Behaviors.same();
    }

    @Override
    public void postStop() {
        timer.cancel();
    }

    public static void main(String[] args) {
        ActorSystem system = ActorSystem.create("ExampleSystem");
        system.actorOf(Props.create(ExampleActor.class), "exampleActor");
    }
}

该代码中定义了一个 ExampleActor 类,其中重写了 preStart() 方法,在该方法中使用 startTimerWithFixedDelay 方法每隔 2 秒向自己发送一条消息。在 createReceive() 方法中定义了消息处理函数,即打印收到消息。在程序退出之前,通过 postStop() 方法取消了定时器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值