Reliable delivery in Typed, #20984

Different approach than in classic AtLeastOnceDelivery because I would like:
* support flow control, with a work pulling approach
* be possible to use with or without persistence (without it may loose
  messages if producer node crashes)
* detect lost messages on the consumer side and let that drive resends,
  instead of aggressively resending from producer side
* deliver messages in order and deduplicate resent messages
* have an efficient protocol for acknowledgments over the network (not ack each message),
  but still have a simple one-by-one protocol for the end user

* support 3 use cases (building blocks)
  * point-to-point
  * work pulling
  * sharding
* optional durable queue, with one event sourced implementation
* protobuf serialization
* ApiMayChange
* reference docs and examples
* api docs
* doc example code missing so far
This commit is contained in:
Patrik Nordwall 2020-03-12 15:37:16 +01:00
parent 6e171815b6
commit 1d16e847b5
61 changed files with 18784 additions and 19 deletions

View file

@ -395,7 +395,8 @@ lazy val persistenceTyped = akkaModule("akka-persistence-typed")
actorTyped,
persistence % "compile->compile;test->test",
persistenceQuery % "test",
actorTypedTests % "test->test",
actorTestkitTyped % "test->test",
clusterTyped % "test->test",
actorTestkitTyped % "test->test",
jackson % "test->test")
.settings(javacOptions += "-parameters") // for Jackson
@ -409,12 +410,13 @@ lazy val clusterTyped = akkaModule("akka-cluster-typed")
cluster % "compile->compile;test->test;multi-jvm->multi-jvm",
clusterTools,
distributedData,
persistence % "test->test",
persistenceTyped % "test->test",
actorTestkitTyped % "test->test",
actorTypedTests % "test->test",
remoteTests % "test->test",
jackson % "test->test")
.settings(Protobuf.settings)
// To be able to import ContainerFormats.proto
.settings(Protobuf.importPath := Some(baseDirectory.value / ".." / "akka-remote" / "src" / "main" / "protobuf"))
.settings(AutomaticModuleName.settings("akka.cluster.typed"))
.settings(Protobuf.settings)
// To be able to import ContainerFormats.proto