我正在试着找出最好的方法来触发一个分片集群中特定类型的所有参与者,基于一个时间表(例如,在早上8点,9点,等等-以类似cron的方式)。
我的计划是在集群中有一个单独的“计时器”参与者,它将按计划向其他集群的参与者发送广播消息。然而,我不确定这是否可行和最佳。Akka Scheduler不提供类似cron的配置。akka-quartz-scheduler似乎不适合Akka集群。
有没有可能从分片的Akka集群内部触发基于调度的操作,也许使用其他框架的功能,比如Spring scheduling?或者在分片Akka集群之外部署调度服务,并使用它向Akka集群发送周期性触发事件更好?
另外,是否可以向分片Akka集群中特定类型的所有参与者广播消息?
发布于 2020-08-20 15:27:44
是否有可能从分片的Akka集群内部触发基于计划的操作?
一般来说,是这样的。但这取决于预定事件的精确度和时间表的类型。让我们假设一个简单的时间表,例如每天早上8点,对高精度没有兴趣。可以使用TimerScheduler创建一个执行元,让我们将此执行元命名为TimerSchedulerActor。给定一个特定的时间表,例如每天08:00,TimerSchedulerActor计算警报需要响起的下一次时间,例如01.09.2020 08:00,然后TimerSchedulerActor计算从当前时间java.lang.System.currentTimeMillis到01.09.2020 08:00需要等待的持续时间。当TimerScheduler熄灭时,TimerSchedulerActor发送消息并计算该时间表的下一个警报时间戳。
如果一个TimerSchedulerActor负责所有消息,则应该确保只有TimerSchedulerActor在运行(单例参与者),因为多个TimerSchedulerActors将为每个计划的事件发送多个消息。您还可以拆分不同的TimerSchedulerActors,以通知不同的Actor组或负责不同的事件。
,还是在分片的Akka集群之外部署一个调度服务,并用它来向Akka集群发送周期性事件?
它可以更容易维护,更容易部署,更容易调试Akka集群内的调度服务。然而,答案取决于作者的技能和经验。一些熟悉Akka之外的调度系统的人(例如cron)也许可以通过在Akka之外思考来找到一个更快的解决方案。我主张在Akka集群中使用解决方案,因为它提供了更多的灵活性。例如,如果面临从java集群内部更改cron (或其他外部系统)的请求,复杂性将会增加。
还可以向分片Akka集群中特定类型的所有参与者广播消息吗?
这取决于参与者的类型。Cluster Receptionist可以用来查找特定的参与者。如果您控制着消息,并且可以在消息和参与者中添加所需的参与者类型,那么一个好的策略可能是将消息发送给此类型的所有潜在参与者,并让他们根据自己的类型对消息执行操作。正确类型的参与者可以对消息执行操作,而另一种类型的参与者可以直接忽略它。
发布于 2020-08-20 15:21:16
您可以:
https://stackoverflow.com/questions/63499561
复制相似问题