【问题标题】:Akka durable mailbox lose messages before the message has been processed?Akka持久邮箱在消息处理之前丢失消息?
【发布时间】:2013-01-30 19:56:01
【问题描述】:

Akka durable mailbox document 声明:

持久邮箱与任何其他不太可能具有事务性的邮箱一样。如果 Actor 在收到消息后但在完成处理之前崩溃,则消息可能会丢失。

假设actor A 使用持久邮箱作为消息队列,该队列有2 条消息,M1 和M2。演员收到 M1 并正在处理 M1。如果A在处理完M1之前崩溃了,M1是否丢失了?一个相关的问题是“A 崩溃”是什么意思:这是否意味着 A 有未捕获的异常或运行 A 的 JVM 崩溃?

【问题讨论】:

    标签: transactions message akka


    【解决方案1】:

    崩溃的原因可以是任何原因,该术语旨在表示处理未完成(被异常中断或因停电或其他任何原因在中间终止)。一旦参与者从邮箱中取出消息,它就会从邮箱中消失。如果您不希望这种行为,则必须实现类似the peek mailbox 的东西,请参阅the docs here

    【讨论】:

    • 我阅读了 peek 邮箱 API 以及文档中的示例代码。该示例在邮箱上调用 ack() 而不是单个消息。如果来自邮箱的两条消息 M1 和 M2 在开始时正在处理中。如果处理完 M1 并且 M2 仍在被另一个 Actor 处理,并且 Actor 调用了 mailbox.ack(),是否意味着 M1 和 M2 都将从邮箱中删除?
    • 邮箱对每个actor都是私有的,任何时候都不能有两条消息“活跃”。
    猜你喜欢
    • 2015-11-27
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 2015-12-15
    • 2013-02-20
    • 1970-01-01
    相关资源
    最近更新 更多