5

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

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

有没有什么简单的方法可以延迟 AKKA 中的消息处理?我知道我可能可以设置一个外部分布式队列,例如 ActiveMQ、RabbitMQ,它可能具有此功能,但我宁愿没有。

我知道我需要使邮箱持久耐用,这样它才能在重新启动或崩溃时存活下来。我们已经有了 mongo 设置,所以我可能会使用MongoBasedMailbox来实现持久性。

4

3 回答 3

1

时间工作流能够以最小的努力支持您的用例。您可以将其视为一个 Durable Actor 平台。当进程重新启动时保留包括线程和局部变量的参与者状态时。

Temporal 为任务处理提供了许多其他功能。

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

请参阅有关Temporal 编程模型的演示文稿。它谈到了 Temporal 的前身 Cadence。

于 2019-06-16T01:27:23.783 回答
0

这并不理想,但Akka Camel Quartz 调度程序可以解决问题。比内置的 ActorSystem 调度器更重量级,但知道 Quartz 有它自己的问题。

于 2013-01-02T21:51:06.423 回答
0

你仍然可以使用普通的 Akka 调度程序,你只需要在 actor 持久性上保持一个状态,以避免在服务器重新启动时丢失作业。

我最近使用了 PersistentFsmActor - 这将使演员的状态保持不变

我不确定在您的情况下您是否必须使用 FSM (Finite State Machine) ,因此您基本上可以使用 persistentActor 来节省插入作业的时间,并在该时间启动调度程序。这样 - 即使您重新启动服务器,actor 也会启动并创建一个新的计划作业,使用持久数据计算剩余的运行时间

于 2015-10-16T07:24:53.780 回答