scala - Akka:向持久邮箱添加延迟

标签 scala queue message-queue akka

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

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

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

我知道我需要使邮箱持久耐用,以便它可以在重新启动或崩溃时幸存下来。我们已经有了 mongo 设置,所以我可能正在使用 MongoBasedMailbox为了耐用。

最佳答案

Temporal Workflow能够以最少的努力支持您的用例。您可以将其视为 Durable Actor 平台。当包括线程和局部变量在内的参与者状态在进程重新启动时保留。
Temporal 为任务处理提供了许多其他功能。

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

  • the presentation这超越了时间编程模型。它谈到了 Temporal 的前身 Cadence。

    关于scala - Akka:向持久邮箱添加延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14129579/

    相关文章:

    scala - GPU 和 SIMD 是否可能在 .NET/Java VM 中实现?

    Ruby Eventmachine排队问题

    Java从队列中检索所有元素,直到队列为空

    Scala actor 作为单线程队列

    c - 消息队列(msgget - msgsnd - msgrcv)Linux - EIDRM

    java - 确认来自 JMS 中不同 channel / session 的消息

    java - 引用内部静态 Java 类时工具箱编译的奇怪行为

    Scala:函数/方法应用程序和元组

    scala - Slick 表中的动态表名覆盖

    c - 处理多种结构类型的队列 [C]