我想知道是否有某种方法可以延迟 akka 消息的处理?
我的用例: 对于我的每个请求,我都有少量工作需要完成,然后我需要在两个小时后完成额外的工作。
有没有什么简单的方法可以延迟 AKKA 中的消息处理?我知道我可能可以设置一个外部分布式队列,例如 ActiveMQ、RabbitMQ,它可能具有此功能,但我宁愿没有。
我知道我需要使邮箱持久耐用,这样它才能在重新启动或崩溃时存活下来。我们已经有了 mongo 设置,所以我可能会使用MongoBasedMailbox来实现持久性。
我想知道是否有某种方法可以延迟 akka 消息的处理?
我的用例: 对于我的每个请求,我都有少量工作需要完成,然后我需要在两个小时后完成额外的工作。
有没有什么简单的方法可以延迟 AKKA 中的消息处理?我知道我可能可以设置一个外部分布式队列,例如 ActiveMQ、RabbitMQ,它可能具有此功能,但我宁愿没有。
我知道我需要使邮箱持久耐用,这样它才能在重新启动或崩溃时存活下来。我们已经有了 mongo 设置,所以我可能会使用MongoBasedMailbox来实现持久性。
时间工作流能够以最小的努力支持您的用例。您可以将其视为一个 Durable Actor 平台。当进程重新启动时保留包括线程和局部变量的参与者状态时。
Temporal 为任务处理提供了许多其他功能。
请参阅有关Temporal 编程模型的演示文稿。它谈到了 Temporal 的前身 Cadence。
这并不理想,但Akka Camel Quartz 调度程序可以解决问题。比内置的 ActorSystem 调度器更重量级,但知道 Quartz 有它自己的问题。
你仍然可以使用普通的 Akka 调度程序,你只需要在 actor 持久性上保持一个状态,以避免在服务器重新启动时丢失作业。
我最近使用了 PersistentFsmActor - 这将使演员的状态保持不变
我不确定在您的情况下您是否必须使用 FSM (Finite State Machine) ,因此您基本上可以使用 persistentActor 来节省插入作业的时间,并在该时间启动调度程序。这样 - 即使您重新启动服务器,actor 也会启动并创建一个新的计划作业,使用持久数据计算剩余的运行时间