微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在分片的Akka群集中安排广播消息

如何解决在分片的Akka群集中安排广播消息

我正在尝试根据时间表(例如,上午8点,上午9点等,以类似cron的方式)找出在分片集群中触发某个类型的所有参与者的最佳方法

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

是否有可能从分片的Akka集群内部触发基于计划的操作,也许使用Spring计划等其他框架的功能?还是最好在分片的Akka群集之外部署调度服务,然后使用它向Akka群集发送定期触发事件?

此外,是否可以向分片的Akka群集中的所有特定类型的演员广播消息?

解决方法

是否有可能从分片的Akka集群内部触发基于计划的操作?

通常是。但这取决于计划事件的准确性和计划的类型。让我们假设一个简单的时间表,例如每天的08:00,对高精度都不感兴趣。可以使用TimerScheduler创建一个actor,让其命名为TimerSchedulerActor。给定特定的时间表,例如每天{8:00} TimerSchedulerActor计算闹钟下一次发出警报的时间,例如01.09.2020 08:00,然后TimerSchedulerActor计算从当前时间java.lang.System.currentTimeMillis到01.09.2020 08:00需要等待的持续时间。当TimerScheduler关闭时,TimerSchedulerActor发送消息并计算该计划的下一个警报时间戳。

如果一个TimerSchedulerActor负责所有消息,则应确保只有TimerSchedulerActor正在运行(Singleton actor),因为多个TimerSchedulerActors将为每个计划的事件发送多个消息。您也可以拆分具有不同的TimerSchedulerActors来通知不同组的Actor或负责不同的事件。

或者最好在分片的Akka群集之外部署调度服务,并使用 将定期事件发送到Akka集群?

在Akka群集中可以更轻松地维护,更易于部署和调试调度服务。但是,答案取决于作者的技能和经验。熟悉Akka外部的调度系统的人(例如cron)也许可以通过在Akka外部进行思考来找到更快的解决方案。我建议在Akka Cluster中提供一种解决方案,因为它提供了更大的灵活性。例如,如果面临从Java集群内部更改cron(或另一个外部系统)的请求,那么复杂性就会增加。

此外,是否可以向分片的Akka群集中的所有特定类型的演员广播消息?

这取决于演员类型。 Cluster Receptionist可用于查找特定演员。如果您控制消息,并且可以在消息和参与者中添加所需的参与者类型,那么一个好的策略是将消息发送给所有此类潜在参与者,并让他们根据消息的类型来行动。正确类型的参与者可以对消息执行操作,而另一类型的参与者可以忽略该消息。

,

您可以:

  • 公开一个HTTP端点,该端点将触发一些任务,并让气流或简单的cron作业命中该端点
  • 使用石英,既可以是石英,也可以是石英。我认为它完全适合akka群集。您认为阻滞剂是什么?可行的做法可能是运行集群单例actor,在其中运行基于石英的基于计划的动作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?