java—在分片akka集群中调度广播消息

gjmwrych  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(402)

我正试图找出一种最佳的方式来触发一个分片集群中特定类型的所有参与者,基于一个时间表(例如,在上午8点、9点等-以cron式的方式)。
我的计划是在集群中有一个“计时器”参与者,它将按计划向其他集群的参与者发送广播消息。然而,我不确定这是否可行和最佳。akka调度器不提供cron类配置。阿克卡石英调度似乎不适合阿克卡集群。
有没有可能从sharded akka集群内部触发基于调度的操作,或者使用一些其他框架的功能,比如spring调度?或者最好在sharded akka集群之外部署一个调度服务,并使用它向akka集群发送周期性触发事件?
另外,是否有可能向碎片阿克卡星团中的所有特定类型的参与者广播一条消息?

nr7wwzry

nr7wwzry1#

您可以:
公开一个将触发某些任务的http端点,并让一个或只是一个cron作业命中该端点
使用石英,无论是阿克卡石英或生石英。我认为它适合阿克卡集群没有问题。你认为阻滞剂是什么?一个可行的做法可能是运行一个集群单例actor,在其中运行基于quartz的基于时间表的操作。

wlwcrazw

wlwcrazw2#

有可能从碎片化的阿克卡集群内部触发基于时间表的操作吗?
一般来说是的。但这取决于预定事件的精度和日程的类型。让我们假设一个简单的时间表,例如每天08:00,对高精度不感兴趣。可以使用timerscheduler创建一个actor,让我们命名这个actor TimerSchedulerActor . 给定特定的时间表,例如每天08:00 TimerSchedulerActor 计算下次需要关闭警报的时间,例如01.09.2020 08:00,然后 TimerSchedulerActor 计算从当前时间开始它需要等待的持续时间 java.lang.System.currentTimeMillis 至2020年9月1日08:00。当计时器关闭时 TimerSchedulerActor 发送消息并计算此计划的下一个报警时间戳。
如果有 TimerSchedulerActor 负责所有消息,应确保只有 TimerSchedulerActor 作为多个角色运行(单演员) TimerSchedulerActors 将为每个计划的事件发送多条消息。你也可以有不同的 TimerSchedulerActors 通知不同的参与者或对不同的事件负责。
或者最好在sharded akka集群之外部署一个调度服务,并使用它向akka集群发送周期性事件?
在akka集群中,可以更容易地维护、部署和调试调度服务。然而,答案取决于作者的技能和经验。熟悉akka之外的调度系统的人(例如cron)也许可以通过在akka之外思考来找到更快的解决方案。我主张在akka集群内部使用一种解决方案,因为它提供了更多的灵活性。例如,如果面临从java集群内部更改cron(或另一个外部系统)的请求,复杂性就会增加。
另外,是否有可能向碎片阿克卡星团中的所有特定类型的参与者广播一条消息?
这取决于演员的类型。集群接待员可以用来查找特定的参与者。如果您控制消息,并且可以在消息和参与者中添加所需的参与者类型,那么一个好的策略是将消息发送给此类型的所有潜在参与者,并让他们根据其类型对消息进行操作。正确类型的参与者可以对消息进行操作,而另一类型的参与者可以忽略它。

相关问题