首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在分片Akka集群中调度广播消息

在分片Akka集群中调度广播消息
EN

Stack Overflow用户
提问于 2020-08-20 14:38:33
回答 2查看 216关注 0票数 1

我正在试着找出最好的方法来触发一个分片集群中特定类型的所有参与者,基于一个时间表(例如,在早上8点,9点,等等-以类似cron的方式)。

我的计划是在集群中有一个单独的“计时器”参与者,它将按计划向其他集群的参与者发送广播消息。然而,我不确定这是否可行和最佳。Akka Scheduler不提供类似cron的配置。akka-quartz-scheduler似乎不适合Akka集群。

有没有可能从分片的Akka集群内部触发基于调度的操作,也许使用其他框架的功能,比如Spring scheduling?或者在分片Akka集群之外部署调度服务,并使用它向Akka集群发送周期性触发事件更好?

另外,是否可以向分片Akka集群中特定类型的所有参与者广播消息?

EN

回答 2

Stack Overflow用户

发布于 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可以用来查找特定的参与者。如果您控制着消息,并且可以在消息和参与者中添加所需的参与者类型,那么一个好的策略可能是将消息发送给此类型的所有潜在参与者,并让他们根据自己的类型对消息执行操作。正确类型的参与者可以对消息执行操作,而另一种类型的参与者可以直接忽略它。

票数 1
EN

Stack Overflow用户

发布于 2020-08-20 15:21:16

您可以:

  • 公开了一个将触发某些任务的HTTP端点,并让airflow或简单的cron作业使用quartz、akka- quartz -scheduler或raw quartz来访问端点
  • 。我认为它适合akka集群,没有问题。你认为拦截器是什么?一种可行的做法是运行一个集群单例执行器,您可以在其中运行基于quartz的基于调度的操作。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63499561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档