我想知道是否有一些方法可以延迟一个akka消息的处理?
**我的使用情形:**对于我的每个请求,我都有少量的工作需要完成,然后我需要在两个小时后完成额外的工作。
有没有简单的方法来延迟AKKA中的消息处理?我知道我可能可以设置一个外部分布式队列,如ActiveMQ,RabbitMQ,它们可能有这个功能,但我宁愿没有。我知道我需要使邮箱耐用,这样它才能在重新启动或崩溃中生存。我们已经有Mongo设置,所以我可能使用X1E0F1X来提高耐用性。
rpppsulh1#
Temporal Workflow能够以最小的工作量支持您的用例。您可以将其视为一个持久的参与者平台。当参与者状态(包括线程和局部变量)在进程重新启动时被保留。Temporal为任务处理提供了许多其他特性。
请参阅the presentation,它介绍了时态编程模型。它谈到了时态的前身Cadence。
nqwrtyyt2#
这并不理想,但Akka Camel Quartz scheduler可以做到这一点。比内置的ActorSystem调度程序更重量级,但要知道Quartz也有自己的问题。
scyqe7ek3#
您仍然可以使用普通的Akka调度程序,您只需要在执行元持久性上保持一个状态,以避免在服务器重新启动时丢失作业。我最近使用了PersistentFsmActor -它将使参与者的状态保持持久我不确定在您的情况下是否必须使用FSM(有限状态机),因此您基本上可以使用persistentActor来保存插入作业的时间,并在该时间启动调度程序。这样,即使您重新启动了服务器,Actor也会启动并创建新的计划作业,使用持久性数据来计算运行该作业的剩余时间
3条答案
按热度按时间rpppsulh1#
Temporal Workflow能够以最小的工作量支持您的用例。您可以将其视为一个持久的参与者平台。当参与者状态(包括线程和局部变量)在进程重新启动时被保留。
Temporal为任务处理提供了许多其他特性。
请参阅the presentation,它介绍了时态编程模型。它谈到了时态的前身Cadence。
nqwrtyyt2#
这并不理想,但Akka Camel Quartz scheduler可以做到这一点。比内置的ActorSystem调度程序更重量级,但要知道Quartz也有自己的问题。
scyqe7ek3#
您仍然可以使用普通的Akka调度程序,您只需要在执行元持久性上保持一个状态,以避免在服务器重新启动时丢失作业。
我最近使用了PersistentFsmActor -它将使参与者的状态保持持久
我不确定在您的情况下是否必须使用FSM(有限状态机),因此您基本上可以使用persistentActor来保存插入作业的时间,并在该时间启动调度程序。这样,即使您重新启动了服务器,Actor也会启动并创建新的计划作业,使用持久性数据来计算运行该作业的剩余时间