如何在 akka scheduler 中重用 actor ref
how to reuse actor ref in akka scheduler
我正在使用如下代码所示的 akka 调度程序。
每个用户都可以登录到我的应用程序并可以为后台创建调度程序task.I我正在为此目的使用 Akka 调度程序。
对于每个用户 ID,我调用 buildScheduler 方法,如下所示。
在调用此方法之前,我使用同一用户 ID 的 Cancellable 对象取消了现有的调度程序。 (我实现了以用户 ID 为键,以可取消对象为值的静态映射)
即使在我取消现有调度程序后,actorSystem.actorOf() 也会给出错误参与者名称不唯一的错误。
我想了解当我们使用 Cancellable 实例取消调度程序时到底发生了什么?
它是否也会杀死 ActorRef,如果不是,我们是否应该在每次调用此 buildScheduler 方法时重用相同的 ActorRef?
消息呢,即使我们在 Cancellable 实例上调用取消后,它会永远存在内存中吗?只有当垃圾收集器调用时,内存才会被清理?
public Cancellable buildScheduler(String actorName, SchedulerActorMessage message, long interval, TimeUnit timeUnit, long initialDelay, String actorMapKey) {
ActorRef daemonRef = actorSystem.actorOf(Props.create(SchedulerActor.class), actorName);
Cancellable cancellableActor = actorSystem.scheduler().schedule(FiniteDuration.apply(initialDelay, timeUnit),
FiniteDuration.apply(interval, timeUnit), daemonRef, message,
actorSystem.dispatcher(), ActorRef.noSender());
actorMap.put(actorMapKey, cancellableActor);
return cancellableActor;
}
我是演员新手,知识很基础,如果这个问题很有意义,请原谅我。
I would like to understand what exactly happen when we cancel the scheduler using Cancellable instance ? Does it kill the ActorRef as well
不,不是。 actor的生命周期独立于定时任务。
should we reuse the same ActorRef every time we call this buildScheduler method
这取决于您的用例,如果您的 actor 保持您希望在计划之间保持的状态,您应该在 buildScheduler
之外创建 actor 并传递 ActorRef
.
What about message, will it be in memory forever even after we call cancel on Cancellable instace and memory will get clean up only when garbage collector invoke
在Java中,内存总是被垃圾收集器回收,所以在任务被取消后,如果传递的SchedulerActorMessage
没有被例如buildScheduler
调用者引用, 它将被垃圾收集。
我正在使用如下代码所示的 akka 调度程序。
每个用户都可以登录到我的应用程序并可以为后台创建调度程序task.I我正在为此目的使用 Akka 调度程序。
对于每个用户 ID,我调用 buildScheduler 方法,如下所示。 在调用此方法之前,我使用同一用户 ID 的 Cancellable 对象取消了现有的调度程序。 (我实现了以用户 ID 为键,以可取消对象为值的静态映射)
即使在我取消现有调度程序后,actorSystem.actorOf() 也会给出错误参与者名称不唯一的错误。
我想了解当我们使用 Cancellable 实例取消调度程序时到底发生了什么? 它是否也会杀死 ActorRef,如果不是,我们是否应该在每次调用此 buildScheduler 方法时重用相同的 ActorRef?
消息呢,即使我们在 Cancellable 实例上调用取消后,它会永远存在内存中吗?只有当垃圾收集器调用时,内存才会被清理?
public Cancellable buildScheduler(String actorName, SchedulerActorMessage message, long interval, TimeUnit timeUnit, long initialDelay, String actorMapKey) {
ActorRef daemonRef = actorSystem.actorOf(Props.create(SchedulerActor.class), actorName);
Cancellable cancellableActor = actorSystem.scheduler().schedule(FiniteDuration.apply(initialDelay, timeUnit),
FiniteDuration.apply(interval, timeUnit), daemonRef, message,
actorSystem.dispatcher(), ActorRef.noSender());
actorMap.put(actorMapKey, cancellableActor);
return cancellableActor;
}
我是演员新手,知识很基础,如果这个问题很有意义,请原谅我。
I would like to understand what exactly happen when we cancel the scheduler using Cancellable instance ? Does it kill the ActorRef as well
不,不是。 actor的生命周期独立于定时任务。
should we reuse the same ActorRef every time we call this buildScheduler method
这取决于您的用例,如果您的 actor 保持您希望在计划之间保持的状态,您应该在 buildScheduler
之外创建 actor 并传递 ActorRef
.
What about message, will it be in memory forever even after we call cancel on Cancellable instace and memory will get clean up only when garbage collector invoke
在Java中,内存总是被垃圾收集器回收,所以在任务被取消后,如果传递的SchedulerActorMessage
没有被例如buildScheduler
调用者引用, 它将被垃圾收集。