We are excited to announce a new patch release of Akka 2.5. This version contains several new features:
- Artery transport with TCP and TLS
- StreamRefs - Reactive Streams over the Network (click for 5min video)
- Rolling update config validation, thanks to @octonato
Other notable improvements and bug fixes:
- Remove unused and quarantined outbound connections in Artery (memory leak), #23967
- Fix blocking-io-dispatcher setting in Akka Streams, #24357
- Fix bug that caused stashed timer messages to be discarded, #24557
- Fix bug in automatic unsubscribe from DistributedPubSub on actor termination, thanks to @naiello, #24294
- Akka Streams combinators
Source.lazilyAsync, thanks to @kelebra, #24519
Flow.lazyInit, thanks to @gosubpl, #24427
Flow.wireTap, thanks to @catalin-ursachi, #15077
Flow.divertTo, thanks to @viktorklang, #24388
Flow.alsoToeager cancellation by default, thanks to @jeremystone, #24291
Flow.collectTypethanks to @hepin1989, #24254
RestartSinkto restart only on failures, thanks to @nachinius, #24421
- Higher level API for TLS over TCP, #24153
A total of 131 issues were closed since 2.5.9. The complete list can be found on the 2.5.10 milestone on github.
Artery transport with TCP and TLS
Customers and users have asked for encryption in the new remoting implementation (Artery). Rather than adding encryption to Aeron (UDP) we decided to include an alternative transport based on Akka Streams TCP/TLS, which shares its basic infrastructure with the Aeron (UDP) transport.
It can also be used with plain TCP without TLS, which is a good alternative when UDP can’t be used. It’s also using less CPU than Aeron when the system is idle or at low message rates.
We have done extensive testing of the new transport, and we continuously run all of Akka’s tests for remoting and clustering with the TCP transport in the CI environment. However, since it’s a new implementation the TCP/TLS transport is not ready for usage in production yet, but please test it and report any issues.
You find more information and instructions of how to enable TCP or TLS in Artery in the documentation.
StreamRefs - Reactive Streams over the network
Stream references, or “stream refs” for short, allow running Akka Streams across multiple nodes within an Akka Cluster.
The screencast should give you a good overview of this exciting feature.
The prime use case for stream refs is to replace raw actor or HTTP messaging between systems where a long running stream of data is expected between two entities. Often times, they can be used to effectively achieve point to point streaming without the need of setting up additional message brokers or similar secondary clusters.
Stream refs are well suited for any system in which you need to send messages between nodes and need to do so in a flow-controlled fashion. Typical examples include sending work requests to worker nodes, as fast as possible, but not faster than the worker node can process them, or sending data elements which the downstream may be slow at processing. It is recommended to mix and introduce stream refs in Actor messaging based systems, where the actor messaging is used to orchestrate and prepare such message flows, and later the stream refs are used to do the flow-controlled message transfer.
You find more details in the documentation.
There are several breaking changes since 2.5.8 and 2.5.9 in the under-development “may change” Akka Typed module. Most of the development has been completed and from now on only minor adjustments in the APIs are expected. Akka Typed 2.5.10 should be stable enough to start using for development.
Our goal is to ship a production ready version of Akka Typed soon and therefore we have removed the new runtime implementation and initially only support running typed actors with the underlying untyped actor system. See the Coexistence documentation.
Some major structural changes to Akka Typed have been done, such as splitting up in separate modules e.g. akka-actor-typed with package root akka.actor.typed, and akka-cluster-typed with package akka.cluster.typed.
Other notable improvements of Akka Typed:
- New documentation, including a useful Interactions Patterns section
- TestKits for synchronous and asynchronous testing
- Improved Persistence API
- Improved Receptionist API
- Integration with Akka Streams
- Support for stashing
- Factory methods in
For this release we had the help of 36 committers – thank you all very much!
commits added removed 38 9046 3376 Patrik Nordwall 32 8484 2425 Johan Andrén 17 13258 4738 Konrad `ktoso` Malawski 16 2653 535 Christopher Batey 14 622 148 Johannes Rudolph 13 653 185 Arnout Engelen 8 514 259 Martynas Mickevičius 5 300 97 Richard Imaoka 3 428 760 Catalin Ursachi 3 104 39 Roman Filonenko 3 46 23 Josep Prat 2 781 10 gosubpl 2 270 26 Viktor Klang (√) 2 135 33 Stefano Bonetti 2 5 5 Song Kun 1 4811 102 Renato Cavalcanti 1 198 9 虎鸣 1 141 10 Ignacio (nachinius) Peixoto 1 110 0 Oleksii Tkachuk 1 101 3 Evgeny Veretennikov 1 59 26 jeremystone 1 51 6 Albert Serrallé Ríos 1 55 1 Anil Gursel 1 33 10 Arron Norwell 1 31 7 pwliwanow 1 36 0 Nick Aiello 1 11 11 Denys Zadorozhnyi 1 19 2 ryota-sakamoto 1 1 7 James Roper 1 4 4 Victor Hiairrassary 1 5 2 Daniel Urban 1 1 2 Sebastian Harko 1 1 1 Fredrik Meyer 1 1 1 Ryan C. Hill 1 1 1 Marc Piechura 1 1 0 Julien Broi
– The Akka Team