我想知道是否有某种方法可以延迟处理akka消息?
我的用例:对于我的每个请求,我都需要做少量的工作,然后我需要在两小时后完成额外的工作。
有没有简单的方法可以延迟处理AKKA中的邮件?我知道我可以设置一个外部分布式队列,例如ActiveMQ,RabbitMQ,它可能具有此功能,但我不愿意。
我知道我需要使邮箱持久耐用,这样它才能在重启或崩溃后继续存在。我们已经设置了mongo,所以我可能会使用MongoBasedMailbox来保持持久性。
答案 0 :(得分:0)
它并不理想,但Akka Camel Quartz scheduler可以解决问题。比内置的ActorSystem调度程序更重量级,但知道Quartz有自己的问题。
答案 1 :(得分:0)
你仍然可以使用正常的Akka调度程序,你只需要保持actor持久性的状态,以避免在服务器重新启动时丢失作业。
我最近使用了PersistentFsmActor - 它将保持actor的状态持久
我不确定在你的情况下你必须使用FSM(有限状态机),所以你基本上只需要使用persistentActor来节省插入作业的时间,并启动一个调度程序到那个时候。这样 - 即使你重新启动服务器,actor也会启动并创建一个新的预定作业,使用持久数据来计算剩下的时间来运行它
答案 2 :(得分:0)
Cadence Workflow能够以最小的努力支持您的用例。您可以将其视为Durable Actor平台。当包括线程和局部变量在内的参与者状态在整个进程重新启动时得以保留时。
Cadence为任务处理提供了许多其他功能。
请参见介绍Cadence编程模型的the presentation。