Akka 2.5.0 was released two and a half years ago, and since then we have published 26 patch releases. So it’s time for a new minor release. Today we are proud to announce the availability of the first release candidate (2.6.0-RC1).
We intend to publish the final 2.6.0 within a few weeks, unless any critical issues are reported. Please help by trying the release candidate with your application or library.
Highlights of upcoming Akka 2.6.0 are new APIs with type-safety for Akka Actors, and better stability for Akka Cluster with Artery and improved serialization.
Changes in 2.6.0-RC1
Some notable changes in 2.6.0-RC1 since 2.6.0-M8:
- Many documentation improvements
- Remove auto-downing #27788
- Align naming and signatures for lazy and future stream operators #26446
- New retry flow in Streams #27230
- Stream cancellation modes #27594
- Construct Streams TLS and Tcp from SSLEngine instead of SSLContext and AkkaSSLConfig parameters #27766
- Support task cancellation in
CoordinatedShutdown, thanks to @SmedbergM #27335
- New DNS protocol via the DNS extension #27219
- Fix bug in supervision of Classic actor with Typed parent #27970
- Use faster mailbox in Akka Typed #27125
- Fail startup if mixed versions are used #27965
- Prepare for other compression algorithms in JacksonSerializer #27889
- Dependency updates
A total of 107 issues were closed since 2.6.0-M8. The complete list can be found on the 2.6.0-RC1 milestone on github.
Highlights of Akka 2.6
The key features of the upcoming 2.6.0 release are:
- Stable APIs of Akka Typed, see below.
- New default transport for actor messaging, see Artery below.
- Serialization with Jackson, see below.
- Make Akka internals immune against thread starvation issues by using an internal dispatcher for Akka internal actors and tasks.
- Simplify running of Akka Streams with an ActorSystem without creating a Materializer, see example.
- Propagate cause for Streams cancelation upstreams, which can be used for better error handling in for example Akka HTTP.
- Documentation improvements.
- SLF4J logging API in Akka Typed
- Promote APIs marked as may change and remove deprecated features.
A total of 465 issues were closed since 2.6 development started in April, 2019 (~v2.5.22). The complete list can be found on the milestones on github: 2.6.0-M1, 2.6.0-M2, 2.6.0-M3, 2.6.0-M4, 2.6.0-M5, 2.6.0-M6, 2.6.0-M7, 2.6.0-M8, and 2.6.0-RC1
Stable APIs of Akka Typed
In Akka 2.6, we have finally marked the new typed Actor API (“Akka Typed”) as stable. The typed API is now officially the main API for Akka. In the typed API, each actor needs to declares which message type it is able to handle and the type system enforces that only messages of this type can be sent to the actor. We want to say special thanks to Dr. Roland Kuhn for the early prototypes of Akka Typed several years ago and for providing valuable input along the way.
Akka Typed was declared ready to be used in production a while ago in Akka 2.5.22. Since then we have polished the APIs further and improved the documentation. With Akka 2.6.0 the APIs
are fully stable, with the same binary compatibility guarantees as with other parts of Akka.
Alongside the classic Actor API, Akka now provides new APIs for all the main modules, such as Persistence and
Cluster Sharding. While introducing these new APIs we took the opportunity to rework these APIs and have improved the usability experience of all these modules. The goal was to make them more guided for the most common usage without limiting the flexibility to go beyond that.
It’s important to note that the classic APIs are still fully supported and existing applications can
continue to use the classic APIs. It is currently not planned to deprecate or remove the classic API. For new projects we recommend using the new Actor API. It is possible to use the new Actor APIs together with classic actors in the same ActorSystem. An existing application doesn’t have to change, but if you like it’s possible to introduce Akka Typed for new functionality or migrate at your own pace.
Artery TCP is the new default transport for actor messaging. It is built on top of Streams TCP and has support for TLS. Alternatively, Aeron can be used as an underlying transport.
Artery improves stability for systems using Akka Cluster and also has much better performance.
One thing to be aware of is that rolling update from classic remoting to Artery is not supported since the protocol is completely different. It will require a full cluster shutdown and new startup. Classic remoting is deprecated but can still be used in 2.6.x, for example to support rolling updates until a full shutdown can be performed. See migration guide for more information.
Serialization with Jackson
A new serializer that is using Jackson is included in Akka. It supports both JSON and binary CBOR formats.
We have recommended against using Java serialization and now it has been disabled by default. Jackson is a good choice in many cases, and our recommendation if you don’t have other preferences or constraints.
Akka 2.6 is binary backwards compatible with 2.5 with the ordinary exceptions listed in the documentation.
What we can do in minor releases compared to patch releases are things like change of default configuration and removal of deprecated features. Some configuration changes may be needed when updating, please read the migration guide as a first step.
Libraries built for Akka 2.5.x can also be used with Akka 2.6.x. For example Akka HTTP 10.1.10 and Akka Management 1.0.3 can be used with Akka 2.6.0-RC1 dependencies. You may have to add explicit dependencies to the new Akka version in your build.
For this release, since 2.6.0-M8, we had the help of 24 committers – thank you all very much!
commits added removed 65 5047 2526 Patrik Nordwall 16 1259 685 Christopher Batey 14 3149 850 Johan Andrén 12 4923 38 Scala Steward 9 288 304 Arnout Engelen 6 1966 57 Enno 5 326 137 Helena Edelson 4 546 43 Johannes Rudolph 2 2 2 Ignasi Marimon-Clos 1 439 73 Matthew Smedberg 1 0 351 tison 1 285 52 Marcos Pereira 1 112 1 Tanju Erinmez 1 72 2 Raymond Roestenburg 1 17 1 Eric Cartner 1 8 8 Matt Kohl 1 7 4 sebarys 1 3 6 Matthias Kurz 1 8 0 James Roper 1 2 2 SageM 1 2 2 franciscolopezsancho 1 1 3 Nicolas Vollmar 1 1 1 CloudCalvin 1 1 1 Robert Stoll
– The Akka Team