akka - 如何使用 akka 作为复制机制

标签 akka

我是 akka 的新手,打算在我的新项目中使用它作为数据复制机制。

在这种情况下,有一个主服务器和一个复制数据服务器。复制数据应包含与主数据相同的数据。每次在主服务器中发生数据更改时,它都会向复制服务器发送一条更新消息。这里主服务器是发送方,复制服务器是接收方。

但是在挖掘了文档之后,我仍然不确定如何满足以下用例:

  • 当接收方崩溃时,发送方应该堆积消息发送,不应该丢失任何消息。它应该能够稍后重新连接到接收器并继续上次成功的消息。
  • 当发送方崩溃时,它应该重新启动并且重新启动之间没有消息丢失。
  • 消息的处理顺序与它们发送的顺序相同。

  • 所以我的问题是,如何配置 akka 以创建可以执行此操作的发送方和接收方?

    我不确定带有 DurableMessageBox 的 actor 可以解决这个问题。如果可以,我如何模拟上述情况进行测试?

    更新:

    在阅读了 Victor 所指的文档后,我现在明白我想要的是 仅此一次 模式,这是非常昂贵的。

    在 akka 文档中它说

    Actual transports may provide stronger semantics, but at-most-once is the semantics you should expect. The alternatives would be once-and-only-once, which is extremely costly, or at-least-once which essentially requires idempotency of message processing, which is a user-level concern.



    所以为了实现保证交付,我可能需要转向其他一些 MQ 解决方案(例如 Kafka ),或者尝试实现 仅此一次 使用 DurableMessageBox,看看我的特定用例是否可以减轻它的复杂性。

    最佳答案

    您需要编写自己的使用持久订阅者模式的远程处理,因为 Akka 消息发送保证没有您想要的那么严格:http://doc.akka.io/docs/akka/2.0/general/message-send-semantics.html

    干杯,

    关于akka - 如何使用 akka 作为复制机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9764725/

    相关文章:

    java - Akka 消息中的发送行为

    unit-testing - 如何在不使用 Thread.sleep 的情况下对向自身发送消息的 Akka Actor 进行单元测试

    java - 分析线程转储 - sun.misc.Unsafe.park 上有很多被阻塞的线程

    java - 将 akka ByteString 转换为 Java InputStream?

    akka - 在 Spray.io 应用程序中传递变量

    scala - Akka HTTP 背压连接

    java - Akka远程路由主机名配置问题

    multithreading - JBoss netty : How can I integrate a Telnet connection in a separate thread?

    remoting - 使用 Akka 启动多个远程服务器

    java - Play 框架 [2.5.0 java] - 阻塞的 netty-event-loop 线程导致超时