Dear hakkers,
we—the Akka committers—are proud to announce the FINAL RELEASE of Akka 2.4.2. The main change in this release is that it includes Streams & HTTP. Some of these new modules are still marked experimental due to impending API changes that we could not yet finish, in particular these are akka-http (the DSLs) and the HTTP marshaller modules for spray-json, jackson, and scala-xml. In comparison to Streams & HTTP 2.0 the main changes are:
- significant performance improvement for HTTP handling, now reaching roughly 75% of Spray’s performance for long-lived HTTP connections—this is not the end of the performance work, we have only just begun (in particular the number of connections per second needs more work)
- replacement of all uses of the Unit type (represented as BoxedUnit in Java) with the more descriptive types
akka.Done
(for signaling successful completion) andakka.NotUsed
(for materialization results of stages that do not produce a value) - usage of Java 8 types in the Java DSLs:
java.util.Optional
instead ofscala.Option
andjava.util.concurrent.CompletionStage
instead ofscala.concurrent.Future
Especially the second and third point mean that porting code from Streams & HTTP 2.0 to Akka 2.4.2 will require some mechanical source code changes, please refer to the migration guide(for Java and Scala) for the details.
But also in the rest of Akka much work was done, with highlights being:
- fixed a possible replay consistency issue in Akka Persistence and a too tight specification in the TCK
- silence heartbeat logging in ClusterClient and add a notification when it cannot reconnect
- provide an API for ClusterSharding state retrieval
- improvements to BackoffSupervisor
- fix documentation for max-pool-size settings (this was a little unintuitive, makes a good trivia question!)
- add Java API for ByteString builders
- fix a race condition that could lead to lost messages in DistributedPubSub
- add an
ask()
variant that can be used withoutsender()
, i.e. by putting the promise reference into the message - added Java patterns for CompletionStage, see PatternsCS
Closed issues since version 2.4.1 can be found here.
Binary Compatibility
Akka 2.4.2 is backwards binary compatible with previous 2.4.x and 2.3.x versions (exceptions listed below). This means that the new JARs are a drop-in replacement for the old one (but not the other way around) as long as your build does not enable the inliner (Scala-only restriction). It should be noted that Scala 2.11.x is is not binary compatible with Scala 2.10.x, which means that Akka’s binary compatibility property only holds between versions that were built for a given Scala version—akka-actor_2.11-2.4.2-RC1.jar is compatible with akka-actor_2.11-2.3.14.jar but not with akka-actor_2.10-2.3.14.jar.
Binary compatibility is not maintained for the following:
- testkits:
- akka-testkit
- akka-multi-node-testkit
- akka-persistence-tck
- akka-stream-testkit
- akka-http-testkit
- experimental modules:
- akka-persistence-query-experimental
- akka-distributed-data-experimental
- akka-typed-experimental
- akka-http-experimental
- akka-http-spray-json-experimental
- akka-http-xml-experimental
- akka-http-jackson-experimental
- features, classes, methods that were deprecated in 2.3.0 or earlier and removed in 2.4.x
- everything marked as INTERNAL API in the JavaDoc.
Outlook
The next version will focus on getting the Akka HTTP Java DSL aligned with the Scala DSL—this is the reason for the “experimental” designation that remains on this module for now. Another focus is to further optimize our Stream internals and HTTP usage of same so that the performance will be comparable to Spray for all cases.
Credits
Due to incorporating the full development of Streams & HTTP this release is HUMONGOUS: 2493 files changed, 179223 insertions, 4238 deletions. Our statistics script counts 101 committers:
commits added removed
248 34061 15985 Johannes Rudolph
217 37657 15740 Konrad Malawski
183 61096 25081 Mathias
179 35171 21224 Patrik Nordwall
155 27724 21264 Roland Kuhn
143 67772 24277 Endre Sándor Varga
62 6836 7209 Viktor Klang
57 8558 2049 Alexander Golubev
53 5901 3135 Martynas Mickevičius
46 7420 6288 Johan Andrén
38 1099 1284 2beaucoup
28 11195 5826 Björn Antonsson
14 1706 523 galarragas
13 2529 647 Martynas Mickevicius
7 1052 283 Gilad Hoch
7 875 271 lolski
6 68 69 Heiko Seeberger
5 131 17 Brian Topping
5 473 77 Anton Karamanov
5 668 5 Benjamin Thuillier
4 404 56 Tal Pressman
4 8 7 Richard Bradley
3 16 1 hepin
3 7 7 Philip L. McMahon
3 120 38 Chris Baxter
3 32 14 Matthias Sperl
3 165 33 Bojan Petrovic
3 33 10 Daniel Wegener
3 258 16 Wojciech Jurczyk
3 5 6 Lukasz Kryger
3 209 243 André Rüdiger
2 345 21 israel
2 47 24 Tim Harper
2 10 23 naferx
2 18 18 Eric Nelson
2 40 35 Alexey Romanchuk
2 29 8 Balazs Kossovics
2 138 11 Jisoo Park
2 17 14 Matthias Lüneberg
2 13 13 Sören Brunk
2 5 5 Jakub Kozłowski
2 2 2 netcomm
2 148 24 Catalin Ursachi
2 67 22 Mathias Bogaert
1 67 40 Roland Ferenczy
1 8 6 keredin
1 0 0 Björn Antonsson
1 25 1 James Roper
1 64 2 kulikov
1 18 9 Volker Stampa
1 1893 1893 Prayag Verma
1 2 2 Brian Drupieski
1 1 1 Johan Andrén
1 1 1 Dorin Cobzac
1 252 258 Philipp Hofmann
1 40 7 Peter Vlugter
1 1 1 Jun
1 6 0 Ryan Bair
1 495 0 Martin Krasser
1 2 0 raam
1 55 0 Kaspar Fischer
1 220 5 Rich Dougherty
1 169 19 Alek Storm
1 12 1 Olivier ROLAND
1 3 3 Julian Tescher
1 3 24 drewhk
1 227 64 pjan vandaele
1 1 1 egisj
1 6 0 André Cardoso
1 1 1 Chris Brett
1 8 0 Raman Gupta
1 6 7 Denis Mikhaylov
1 3 3 Fehmi Can Saglam
1 6 2 Daniel Moran
1 2 2 Jason Zaugg
1 784 417 Raymond Roestenburg
1 20 15 Kirill Plyashkevich
1 38 5 Eugene Dzhurinsky
1 1 1 Felix Geller
1 16 16 何品
1 70 2 Alois Cochard
1 37 8 Frank Murphy
1 352 50 qian miao
1 216 1 Iain Monro
1 81 81 kukido
1 6 6 Brendan McAdams
1 23 5 Greg Methvin
1 0 1 Arnout Engelen
1 243 0 Philipp
1 1 1 luben karavelov
1 4 0 Harit Himanshu
1 14 8 Otto Chrons
1 26 1 Anderson Osagie
1 51 35 prettynatty
1 1 1 Piotr Jarzemski
1 147 33 adebski
1 7 0 Nafer Sanabria
1 97 28 Greg Beech
1 1 1 Jesse Haber-Kucharsky
1 1 1 Jan Ypma
Thanks a lot to every single one of you!
Happy hakking!
– The Akka Team