akka流是否提供有保证的交付

时间:2019-12-25 01:58:11

标签: java akka akka-stream akka-persistence

以下来自文档(akka):

交货保证

流裁判将正常的演员消息传递用于他们的火车比赛,因此提供了相同水平的基本交付保证。流引用确实通过需求重新传递和顺序故障检测在某种程度上扩展了语义。换句话说:

messages are sent over actor remoting
    which relies on TCP (classic remoting or Artery TCP) or Aeron UDP for basic redelivery mechanisms
messages are guaranteed to to be in-order
messages can be lost, however:
    a dropped demand signal will be re-delivered automatically (similar to system messages)
    a dropped element signal will cause the stream to fail

(链接-> https://doc.akka.io/docs/akka/current/stream/stream-refs.html

看完这篇文章,我很好奇。那么akka流是否提供有保证的交付。 例如。一堆参与者将事件存储在日记中,该事件向另一个参与者馈送了一个将消息批量处理的流(例如,对于最多1000条消息,流为1秒)。这样可以保证交货吗?

此外,作为附带问题。如果系统消息自动重新传递丢弃的消息,这是否意味着事件流可以保证传递?

1 个答案:

答案 0 :(得分:0)

StreamRefs当前(Akka 2.6.1)除了实现元素的序列编号和需求重新信令外,目前未实现任何可靠性:

  • 如果从元素序列号中检测到间隙或无序传递,则流将失败。没有重新交付元素。
  • 如果接收方的请求请求丢失,则会在超时后重新发送。

接收方有一个缓冲区,万一发生流故障,在发送方看到接收方的故障信号之前,该流中的所有元素以及正在运行的所有元素都会丢失(该消息通过网络,所以不是立即发送的) )。