我是akka的新手,打算在我的新项目中使用它作为数据复制机制.
在此方案中,有一个主服务器和一个复制数据服务器.复制数据应包含与主数据相同的数据.每次在主服务器中发生数据更改时,它都会向复制服务器发送更新消息.这里主服务器是发件人,复制服务器是Receiver.
但在挖掘文档后,我仍然不确定如何满足以下用例:
>当接收方崩溃时,发送方应堆积要发送的消息,不应丢失任何消息.它应该能够稍后重新连接到接收器并继续上一次成功的消息.
>当发件人崩溃时,它应该重新启动,重启之间没有消息丢失.
>消息的处理顺序与发送的顺序相同.
所以我的问题是,如何配置akka来创建发送者和接收者,可以做到这一点?
我不确定有DurableMessageBox的演员可以解决这个问题.如果可以的话,我如何模拟上述情况进行测试?
更新:
在阅读了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
干杯,
√