Akka:为持久邮箱添加延迟

icomxhvb  于 2022-11-06  发布在  其他
关注(0)|答案(3)|浏览(174)

我想知道是否有一些方法可以延迟一个akka消息的处理?

**我的使用情形:**对于我的每个请求,我都有少量的工作需要完成,然后我需要在两个小时后完成额外的工作。

有没有简单的方法来延迟AKKA中的消息处理?我知道我可能可以设置一个外部分布式队列,如ActiveMQ,RabbitMQ,它们可能有这个功能,但我宁愿没有。
我知道我需要使邮箱耐用,这样它才能在重新启动或崩溃中生存。我们已经有Mongo设置,所以我可能使用X1E0F1X来提高耐用性。

rpppsulh

rpppsulh1#

Temporal Workflow能够以最小的工作量支持您的用例。您可以将其视为一个持久的参与者平台。当参与者状态(包括线程和局部变量)在进程重新启动时被保留。
Temporal为任务处理提供了许多其他特性。

  • 构建了无限过期间隔的指数重试
  • 失败处理。例如,它允许执行一个任务,如果在配置的时间间隔内两个更新都无法成功,则通知另一个服务。
  • 支持长时间运行的心跳操作
  • 实现复杂任务相关性的能力。例如,在发生不可恢复的故障时实现调用链或补偿逻辑(SAGA
  • 提供更新的当前状态的完整可见性。例如,当使用队列时,您知道队列中是否有一些消息,并且您需要额外的数据库来跟踪整个进度。使用临时时,每个事件都被记录。
  • 能够在飞行中取消更新。
  • 请求的节流

请参阅the presentation,它介绍了时态编程模型。它谈到了时态的前身Cadence。

nqwrtyyt

nqwrtyyt2#

这并不理想,但Akka Camel Quartz scheduler可以做到这一点。比内置的ActorSystem调度程序更重量级,但要知道Quartz也有自己的问题。

scyqe7ek

scyqe7ek3#

您仍然可以使用普通的Akka调度程序,您只需要在执行元持久性上保持一个状态,以避免在服务器重新启动时丢失作业。
我最近使用了PersistentFsmActor -它将使参与者的状态保持持久
我不确定在您的情况下是否必须使用FSM(有限状态机),因此您基本上可以使用persistentActor来保存插入作业的时间,并在该时间启动调度程序。这样,即使您重新启动了服务器,Actor也会启动并创建新的计划作业,使用持久性数据来计算运行该作业的剩余时间

相关问题