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

2019年6月25日 23点热度 0条评论

以下来自文档(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秒))。这样可以保证交货吗?

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

解决方案如下:

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

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

接收方有一个缓冲区,在发生流故障的情况下,在发送方从接收方看到故障信号之前,所有流失的元素都会丢失,并且所有正在运行的元素也会丢失(该信号穿过网络,因此不会立即发生)。