Details
Advisory: https://github.com/advisories/GHSA-gpv5-rp6w-58r8 Severity: moderate
There is a newer version of this package available.
See the version list below for details.
dotnet add package Akka --version 1.0.0                
NuGet\Install-Package Akka -Version 1.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Akka" Version="1.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Akka --version 1.0.0                
#r "nuget: Akka, 1.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Akka as a Cake Addin
#addin nuget:?package=Akka&version=1.0.0

// Install Akka as a Cake Tool
#tool nuget:?package=Akka&version=1.0.0                

Akka.NET is a port of the popular Java/Scala framework Akka to .NET

Product Compatible and additional computed target framework versions.
.NET Framework net45 is compatible.  net451 was computed.  net452 was computed.  net46 was computed.  net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (198)

Showing the top 5 NuGet packages that depend on Akka:

Package Downloads
Akka.Remote

Remoting support for Akka.NET. Allows actors to communicate over the network.

Akka.Persistence

Persistence for Akka.NET actors. Allows actors to persist and recover their state in a database-agnostic fashion.

Akka.TestKit

You need a Akka.TestKit.* package! Add the one appropriate for the test framework you use instead. For example: Akka.TestKit.Xunit or Akka.TestKit.VsTest. This package only contains base functionality for writing tests for the Akka.NET framework.

Akka.Streams

Streaming support for Akka.NET. Introduces a LINQ-like interface for writing asynchronous, back-pressure-aware streams built on top of Akka.NET actors.

Akka.Logger.Serilog

Serilog logging adapter for Akka.NET.

GitHub repositories (13)

Showing the top 5 popular GitHub repositories that depend on Akka:

Repository Stars
neo-project/neo
NEO Smart Economy
petabridge/akka-bootcamp
Self-paced training course to learn Akka.NET fundamentals from scratch
petabridge/akkadotnet-code-samples
Akka.NET professional reference code samples
petabridge/NBench
Performance benchmarking and testing framework for .NET applications :chart_with_upwards_trend:
ThembisileNGQ/Akkatecture
a cqrs and event sourcing framework for dotnet core using akka.net
Version Downloads Last updated
1.5.31 3,745 11/11/2024
1.5.30 34,843 10/3/2024
1.5.29 6,006 10/1/2024 1.5.29 is deprecated because it has critical bugs.
1.5.28 49,421 9/4/2024
1.5.28-beta1 1,309 8/23/2024
1.5.27.1 71,609 7/26/2024
1.5.27 7,598 7/25/2024
1.5.27-beta2 4,174 7/3/2024
1.5.27-beta1 976 7/3/2024
1.5.26 91,794 6/27/2024
1.5.25 85,760 6/14/2024
1.5.24 22,986 6/7/2024 1.5.24 is deprecated because it has critical bugs.
1.5.23 16,560 6/6/2024 1.5.23 is deprecated because it has critical bugs.
1.5.22 12,492 6/3/2024 1.5.22 is deprecated because it has critical bugs.
1.5.21 9,775 5/28/2024 1.5.21 is deprecated because it has critical bugs.
1.5.20 116,637 4/29/2024
1.5.19 46,025 4/15/2024
1.5.18 87,385 3/12/2024 1.5.18 is deprecated because it has critical bugs.
1.5.17.1 21,643 3/2/2024 1.5.17.1 is deprecated because it has critical bugs.
1.5.17 3,846 2/29/2024 1.5.17 is deprecated because it has critical bugs.
1.5.16 115,613 1/29/2024 1.5.16 is deprecated because it has critical bugs.
1.5.15 124,204 1/10/2024 1.5.15 is deprecated because it has critical bugs.
1.5.14 143,275 11/3/2023 1.5.14 is deprecated because it has critical bugs.
1.5.13 200,137 9/18/2023
1.5.13-beta1 3,747 8/25/2023
1.5.12 228,813 8/2/2023
1.5.11 24,941 7/27/2023
1.5.10 16,315 7/25/2023
1.5.9 29,934 7/17/2023
1.5.8 153,198 6/15/2023
1.5.7 195,479 5/17/2023
1.5.6 29,082 5/8/2023
1.5.5 54,020 5/4/2023
1.5.4 79,022 4/25/2023
1.5.3 16,728 4/20/2023
1.5.2 76,422 4/6/2023
1.5.1 208,627 3/15/2023
1.5.0 145,414 3/2/2023
1.5.0-beta6 4,838 3/1/2023
1.5.0-beta5 4,011 3/1/2023
1.5.0-beta4 4,124 2/28/2023
1.5.0-beta3 4,860 2/27/2023
1.5.0-beta2 4,312 2/23/2023
1.5.0-beta1 4,145 2/20/2023
1.5.0-alpha4 4,600 2/1/2023
1.5.0-alpha3 7,590 11/15/2022
1.5.0-alpha2 4,154 10/17/2022 1.5.0-alpha2 has at least one vulnerability with moderate severity.
1.5.0-alpha1 13,198 8/22/2022 1.5.0-alpha1 has at least one vulnerability with moderate severity.
1.4.51 57,208 6/28/2023
1.4.50 48,338 3/15/2023
1.4.49 146,380 1/27/2023
1.4.49-beta1 3,984 1/11/2023
1.4.48 163,418 1/5/2023
1.4.47 110,237 12/9/2022
1.4.46 153,848 11/15/2022
1.4.45 108,937 10/19/2022 1.4.45 has at least one vulnerability with moderate severity.
1.4.44 18,400 10/17/2022 1.4.44 has at least one vulnerability with moderate severity.
1.4.43 111,665 9/27/2022 1.4.43 has at least one vulnerability with moderate severity.
1.4.42 111,306 9/23/2022 1.4.42 has at least one vulnerability with moderate severity.
1.4.41 221,586 8/31/2022 1.4.41 has at least one vulnerability with moderate severity.
1.4.40 200,251 7/22/2022 1.4.40 has at least one vulnerability with moderate severity.
1.4.39 293,387 6/1/2022 1.4.39 has at least one vulnerability with moderate severity.
1.4.38 176,161 5/6/2022 1.4.38 has at least one vulnerability with moderate severity.
1.4.37 108,913 4/14/2022 1.4.37 has at least one vulnerability with moderate severity.
1.4.36 76,216 4/5/2022 1.4.36 has at least one vulnerability with moderate severity.
1.4.35 129,766 3/18/2022 1.4.35 has at least one vulnerability with moderate severity.
1.4.34 66,000 3/7/2022 1.4.34 has at least one vulnerability with moderate severity.
1.4.33 94,024 2/14/2022 1.4.33 has at least one vulnerability with moderate severity.
1.4.32 115,661 1/18/2022 1.4.32 has at least one vulnerability with moderate severity.
1.4.31 155,819 12/21/2021 1.4.31 has at least one vulnerability with moderate severity.
1.4.30 10,087 12/20/2021 1.4.30 has at least one vulnerability with moderate severity.
1.4.29 23,320 12/13/2021 1.4.29 has at least one vulnerability with moderate severity.
1.4.28 167,739 11/10/2021 1.4.28 has at least one vulnerability with moderate severity.
1.4.27 183,922 10/11/2021 1.4.27 has at least one vulnerability with moderate severity.
1.4.26 215,211 9/28/2021 1.4.26 has at least one vulnerability with moderate severity.
1.4.25 139,338 9/8/2021 1.4.25 has at least one vulnerability with moderate severity.
1.4.24 41,162 8/17/2021 1.4.24 has at least one vulnerability with moderate severity.
1.4.23 43,807 8/10/2021 1.4.23 has at least one vulnerability with moderate severity.
1.4.22 18,022 8/5/2021 1.4.22 has at least one vulnerability with moderate severity.
1.4.21 393,041 6/16/2021 1.4.21 has at least one vulnerability with moderate severity.
1.4.21-beta1 7,113 6/4/2021 1.4.21-beta1 has at least one vulnerability with moderate severity.
1.4.20 104,870 5/12/2021 1.4.20 has at least one vulnerability with moderate severity.
1.4.19 138,424 4/28/2021 1.4.19 has at least one vulnerability with moderate severity.
1.4.18 110,871 3/23/2021 1.4.18 has at least one vulnerability with moderate severity.
1.4.17 96,407 3/10/2021 1.4.17 has at least one vulnerability with moderate severity.
1.4.16 708,030 1/22/2021 1.4.16 has at least one vulnerability with moderate severity.
1.4.15 30,676 1/20/2021 1.4.15 has at least one vulnerability with moderate severity.
1.4.14 69,646 12/30/2020 1.4.14 has at least one vulnerability with moderate severity.
1.4.13 34,676 12/16/2020 1.4.13 has at least one vulnerability with moderate severity.
1.4.12 300,927 11/16/2020 1.4.12 has at least one vulnerability with moderate severity.
1.4.11 71,372 11/5/2020 1.4.11 has at least one vulnerability with moderate severity.
1.4.10 337,598 8/20/2020 1.4.10 has at least one vulnerability with moderate severity.
1.4.9 100,210 7/21/2020 1.4.9 has at least one vulnerability with moderate severity.
1.4.8 141,095 6/17/2020 1.4.8 has at least one vulnerability with moderate severity.
1.4.7 59,878 5/27/2020 1.4.7 has at least one vulnerability with moderate severity.
1.4.6 48,562 5/12/2020 1.4.6 has at least one vulnerability with moderate severity.
1.4.5 60,619 4/29/2020 1.4.5 has at least one vulnerability with moderate severity.
1.4.4 141,461 3/31/2020 1.4.4 has at least one vulnerability with moderate severity.
1.4.3 52,545 3/18/2020 1.4.3 has at least one vulnerability with moderate severity.
1.4.2 42,033 3/13/2020 1.4.2 has at least one vulnerability with moderate severity.
1.4.1 454,629 3/11/2020 1.4.1 has at least one vulnerability with moderate severity.
1.4.1-rc3 9,457 3/10/2020 1.4.1-rc3 has at least one vulnerability with moderate severity.
1.4.1-rc2 8,024 3/10/2020 1.4.1-rc2 has at least one vulnerability with moderate severity.
1.4.1-rc1 12,075 2/28/2020 1.4.1-rc1 has at least one vulnerability with moderate severity.
1.4.0-beta4 9,710 1/28/2020 1.4.0-beta4 has at least one vulnerability with moderate severity.
1.4.0-beta3 22,538 10/30/2019 1.4.0-beta3 has at least one vulnerability with moderate severity.
1.4.0-beta2 13,423 9/23/2019 1.4.0-beta2 has at least one vulnerability with moderate severity.
1.4.0-beta1 15,714 7/19/2019 1.4.0-beta1 has at least one vulnerability with moderate severity.
1.3.19 1,085 5/2/2024 1.3.19 has at least one vulnerability with moderate severity.
1.3.18 66,300 3/9/2020 1.3.18 has at least one vulnerability with moderate severity.
1.3.17 171,001 12/20/2019 1.3.17 has at least one vulnerability with moderate severity.
1.3.16 92,709 11/14/2019 1.3.16 has at least one vulnerability with moderate severity.
1.3.15 269,847 9/23/2019 1.3.15 has at least one vulnerability with moderate severity.
1.3.14 176,084 7/30/2019 1.3.14 has at least one vulnerability with moderate severity.
1.3.13 244,109 4/30/2019 1.3.13 has at least one vulnerability with moderate severity.
1.3.12 172,922 3/14/2019 1.3.12 has at least one vulnerability with moderate severity.
1.3.11 499,512 12/18/2018 1.3.11 has at least one vulnerability with moderate severity.
1.3.10 252,837 11/2/2018 1.3.10 has at least one vulnerability with moderate severity.
1.3.9 477,419 8/23/2018 1.3.9 has at least one vulnerability with moderate severity.
1.3.8 283,151 6/5/2018 1.3.8 has at least one vulnerability with moderate severity.
1.3.7 41,118 5/15/2018 1.3.7 has at least one vulnerability with moderate severity.
1.3.6 52,943 4/17/2018 1.3.6 has at least one vulnerability with moderate severity.
1.3.5 184,602 2/22/2018 1.3.5 has at least one vulnerability with moderate severity.
1.3.4 41,983 2/1/2018 1.3.4 has at least one vulnerability with moderate severity.
1.3.3 38,032 1/19/2018 1.3.3 has at least one vulnerability with moderate severity.
1.3.2 183,879 10/21/2017 1.3.2 has at least one vulnerability with moderate severity.
1.3.1 161,200 9/5/2017 1.3.1 has at least one vulnerability with moderate severity.
1.3.0 166,597 8/11/2017 1.3.0 has at least one vulnerability with moderate severity.
1.2.3 52,923 7/10/2017 1.2.3 has at least one vulnerability with moderate severity.
1.2.2 21,494 6/28/2017 1.2.2 has at least one vulnerability with moderate severity.
1.2.1 31,025 6/23/2017 1.2.1 has at least one vulnerability with moderate severity.
1.2.0 79,090 4/12/2017 1.2.0 has at least one vulnerability with moderate severity.
1.1.3 78,432 1/23/2017 1.1.3 has at least one vulnerability with moderate severity.
1.1.2 91,936 9/22/2016 1.1.2 has at least one vulnerability with moderate severity.
1.1.1 80,581 7/16/2016 1.1.1 has at least one vulnerability with moderate severity.
1.1.0 26,310 7/7/2016 1.1.0 has at least one vulnerability with moderate severity.
1.0.8 112,328 4/26/2016 1.0.8 has at least one vulnerability with moderate severity.
1.0.7 27,473 4/6/2016 1.0.7 has at least one vulnerability with moderate severity.
1.0.6 40,163 1/18/2016 1.0.6 has at least one vulnerability with moderate severity.
1.0.5 44,648 12/3/2015 1.0.5 has at least one vulnerability with moderate severity.
1.0.4 72,357 8/7/2015 1.0.4 has at least one vulnerability with moderate severity.
1.0.3 17,165 6/12/2015 1.0.3 has at least one vulnerability with moderate severity.
1.0.2 11,486 6/3/2015 1.0.2 has at least one vulnerability with moderate severity.
1.0.1 13,894 4/28/2015 1.0.1 has at least one vulnerability with moderate severity.
1.0.0 20,306 4/9/2015 1.0.0 has at least one vulnerability with moderate severity.
1.0.0-dev1504032244 6,425 4/3/2015 1.0.0-dev1504032244 has at least one vulnerability with moderate severity.
0.8.0 10,688 2/12/2015 0.8.0 has at least one vulnerability with moderate severity.
0.7.1 7,823 12/13/2014 0.7.1 has at least one vulnerability with moderate severity.
0.7.0 10,381 10/20/2014 0.7.0 has at least one vulnerability with moderate severity.
0.6.4 6,164 9/3/2014 0.6.4 has at least one vulnerability with moderate severity.
0.6.3 5,818 8/16/2014 0.6.3 has at least one vulnerability with moderate severity.
0.6.2 5,608 8/5/2014 0.6.2 has at least one vulnerability with moderate severity.
0.6.1 6,360 7/10/2014 0.6.1 has at least one vulnerability with moderate severity.
0.6.0 7,813 6/23/2014 0.6.0 has at least one vulnerability with moderate severity.
0.5.8 5,143 5/23/2014 0.5.8 has at least one vulnerability with moderate severity.
0.5.2 5,123 4/29/2014 0.5.2 has at least one vulnerability with moderate severity.
0.5.0 11,429 4/16/2014 0.5.0 has at least one vulnerability with moderate severity.
0.2.1-beta 4,231 3/22/2014 0.2.1-beta has at least one vulnerability with moderate severity.
0.2.0-beta 6,869 3/19/2014 0.2.0-beta has at least one vulnerability with moderate severity.

Akka.NET is officially no longer in beta status**. The APIs introduced in Akka.NET v1.0 will enjoy long-term support from the Akka.NET development team and all of its professional support partners.
Many breaking changes were introduced between v0.8 and v1.0 in order to provide better future extensibility and flexibility for Akka.NET, and we will outline the major changes in detail in these release notes.
However, if you want full API documentation we recommend going to the following:
[Latest Stable Akka.NET API Docs](http://api.getakka.net/docs/stable/index.html "Akka.NET Latest Stable API Docs")**
[Akka.NET Wiki](http://getakka.net/wiki/ "Akka.NET Wiki")**
----
Updated Packages with 1.0 Stable Release**
All of the following NuGet packages have been upgraded to 1.0 for stable release:
- Akka.NET Core
- Akka.FSharp
- Akka.Remote
- Akka.TestKit
- Akka.DI (dependency injection)
- Akka.Loggers (logging)
The following packages (and modules dependent on them) are still in *pre-release* status:
- Akka.Cluster
- Akka.Persistence
----
Introducing Full Mono Support for Akka.NET**
One of the biggest changes in Akka.NET v1.0 is the introduction of full Mono support across all modules; we even have [Raspberry PI machines talking to laptops over Akka.Remote](https://twitter.com/AkkaDotNET/status/584109606714093568)!
We've tested everything using Mono v3.12.1 across OS X and Ubuntu.
[Please let us know how well Akka.NET + Mono runs on your environment](https://github.com/akkadotnet/akka.net/issues/694)!**
----
API Changes in v1.0**
All methods returning an `ActorRef` now return `IActorRef`**
This is the most significant breaking change introduced in AKka.NET v1.0. Rather than returning the `ActorRef` abstract base class from all of the `ActorOf`, `Sender` and other methods we now return an instance of the `IActorRef` interface instead.
This was done in order to guarantee greater future extensibility without additional breaking changes, so we decided to pay off that technical debt now that we're supporting these APIs long-term.
Here's the set of breaking changes you need to be aware of:
- Renamed:
- `ActorRef`          --> `IActorRef`
- `ActorRef.Nobody`   --> `ActorRefs.Nobody`
- `ActorRef.NoSender` --> `ActorRefs.NoSender`
- `ActorRef`'s  operators `==` and `!=` has been removed. This means all expressions like `actorRef1 == actorRef2` must be replaced with `Equals(actorRef1, actorRef2)`
- `Tell(object message)`, i.e. the implicit sender overload, has been moved
to an extension method, and requires `using Akka.Actor;` to be accessible.
- Implicit cast from `ActorRef` to `Routee` has been replaced with `Routee.FromActorRef(actorRef)`
`async` / `await` Support**
`ReceiveActor`s now support Async/Await out of the box.
```csharp
public class MyActor : ReceiveActor
{
public MyActor()
{
Receive<SomeMessage>(async some => {
//we can now safely use await inside this receive handler
await SomeAsyncIO(some.Data);
Sender.Tell(new EverythingIsAllOK());
});
}
}
```
It is also possible to specify the behavior for the async handler, using `AsyncBehavior.Suspend` and  `AsyncBehavior.Reentrant` as the first argument.
When using `Suspend` the normal actor semantics will be preserved, the actor will not be able to process any new messages until the current async operation is completed.
While using `Reentrant` will allow the actor to multiplex messages during the `await` period.
This does not mean that messages are processed in parallel, we still stay true to "one message at a time", but each await continuation will be piped back to the actor as a message and continue under the actors concurrency constraint.
However, `PipeTo` pattern is still the preferred way to perform async operations inside an actor, as it is more explicit and clearly states what is going on.
Switchable Behaviors**
In order to make the switchable behavior APIs more understandable for both `UntypedActor` and `ReceiveActor` we've updated the methods to the following:
``` C#
Become(newHandler); // become newHandler, without adding previous behavior to the stack (default)
BecomeStacked(newHandler); // become newHandler, without adding previous behavior to the stack (default)
UnbecomeStacked(); //revert to the previous behavior in the stack
```
The underlying behavior-switching implementation hasn't changed at all - only the names of the methods.
Scheduler APIs**
The `Context.System.Scheduler` API has been overhauled to be both more extensible and understandable going forward. All of the previous capabilities for the `Scheduler` are still available, only in different packaging than they were before.
Here are the new APIs:
``` C#
Context.System.Scheduler
.ScheduleTellOnce(TimeSpan delay, ICanTell receiver, object message, ActorRef sender);
.ScheduleTellOnce(TimeSpan delay, ICanTell receiver, object message, ActorRef sender, ICancelable cancelable);
.ScheduleTellRepeatedly(TimeSpan initialDelay, TimeSpan interval, ICanTell receiver, object message, ActorRef sender);
.ScheduleTellRepeatedly(TimeSpan initialDelay, TimeSpan interval, ICanTell receiver, object message, ActorRef sender, ICancelable cancelable);
Context.System.Scheduler.Advanced
.ScheduleOnce(TimeSpan delay, Action action);
.ScheduleOnce(TimeSpan delay, Action action, ICancelable cancelable);
.ScheduleRepeatedly(TimeSpan initialDelay, TimeSpan interval, Action action);
.ScheduleRepeatedly(TimeSpan initialDelay, TimeSpan interval, Action action, ICancelable cancelable);
```
There's also a set of extension methods for specifying delays and intervals in milliseconds as well as methods for all four variants (`ScheduleTellOnceCancelable`, `ScheduleTellRepeatedlyCancelable`, `ScheduleOnceCancelable`, `ScheduleRepeatedlyCancelable`) that creates a cancelable, schedules, and returns the cancelable.
Akka.NET `Config` now loaded automatically from App.config and Web.config**
In previous versions Akka.NET users had to do the following to load Akka.NET HOCON configuration sections from App.config or Web.config:
```csharp
var section = (AkkaConfigurationSection)ConfigurationManager.GetSection("akka");
var config = section.AkkaConfig;
var actorSystem = ActorSystem.Create("MySystem", config);
```
As of Akka.NET v1.0 this is now done for you automatically:
```csharp
var actorSystem = ActorSystem.Create("MySystem"); //automatically loads App/Web.config, if any
```
Dispatchers**
Akka.NET v1.0 introduces the `ForkJoinDispatcher` as well as general purpose dispatcher re-use.
Using ForkJoinDispatcher**
ForkJoinDispatcher is special - it uses [`Helios.Concurrency.DedicatedThreadPool`](https://github.com/helios-io/DedicatedThreadPool) to create a dedicated set of threads for the exclusive use of the actors configured to use a particular `ForkJoinDispatcher` instance. All of the remoting actors depend on the `default-remote-dispatcher` for instance.
Here's how you can create your own ForkJoinDispatcher instances via Config:
```
myapp{
my-forkjoin-dispatcher{
type = ForkJoinDispatcher
throughput = 100
dedicated-thread-pool{ #settings for Helios.DedicatedThreadPool
thread-count = 3 #number of threads
#deadlock-timeout = 3s #optional timeout for deadlock detection
threadtype = background #values can be "background" or "foreground"
}
}
}
}
```
You can then use this specific `ForkJoinDispatcher` instance by configuring specific actors to use it, whether it's via config or the fluent interface on `Props`:
Config**
```
akka.actor.deploy{
/myActor1{
dispatcher = myapp.my-forkjoin-dispatcher
}
}
```
Props**
```csharp
var actor = Sys.ActorOf(Props.Create<Foo>().WithDispatcher("myapp.my-forkjoin-dispatcher"));
```
FluentConfiguration [REMOVED]**
`FluentConfig` has been removed as we've decided to standardize on HOCON configuration, but if you still want to use the old FluentConfig bits you can find them here: https://github.com/rogeralsing/Akka.FluentConfig
F# API**
The F# API has changed to reflect the other C# interface changes, as well as unique additions specific to F#.
In addition to updating the F# API, we've also fixed a long-standing bug with being able to serialize discriminated unions over the wire. This has been resolved.
Interface Renames**
In order to comply with .NET naming conventions and standards, all of the following interfaces have been renamed with the `I{InterfaceName}` prefix.
The following interfaces have all been renamed to include the `I` prefix:
- [X] `Akka.Actor.ActorRefProvider, Akka` (Public)
- [X] `Akka.Actor.ActorRefScope, Akka` (Public)
- [X] `Akka.Actor.AutoReceivedMessage, Akka` (Public)
- [X] `Akka.Actor.Cell, Akka` (Public)
- [X] `Akka.Actor.Inboxable, Akka` (Public)
- [X] `Akka.Actor.IndirectActorProducer, Akka` (Public)
- [X] `Akka.Actor.Internal.ChildrenContainer, Akka` (Public)
- [X] `Akka.Actor.Internal.ChildStats, Akka` (Public)
- [X] `Akka.Actor.Internal.InternalSupportsTestFSMRef`2, Akka` (Public)
- [X] `Akka.Actor.Internal.SuspendReason+WaitingForChildren, Akka`
- [X] `Akka.Actor.Internals.InitializableActor, Akka` (Public)
- [X] `Akka.Actor.LocalRef, Akka`
- [X] `Akka.Actor.LoggingFSM, Akka` (Public)
- [X] `Akka.Actor.NoSerializationVerificationNeeded, Akka` (Public)
- [X] `Akka.Actor.PossiblyHarmful, Akka` (Public)
- [X] `Akka.Actor.RepointableRef, Akka` (Public)
- [X] `Akka.Actor.WithBoundedStash, Akka` (Public)
- [X] `Akka.Actor.WithUnboundedStash, Akka` (Public)
- [X] `Akka.Dispatch.BlockingMessageQueueSemantics, Akka` (Public)
- [X] `Akka.Dispatch.BoundedDequeBasedMessageQueueSemantics, Akka` (Public)
- [X] `Akka.Dispatch.BoundedMessageQueueSemantics, Akka` (Public)
- [X] `Akka.Dispatch.DequeBasedMailbox, Akka` (Public)
- [X] `Akka.Dispatch.DequeBasedMessageQueueSemantics, Akka` (Public)
- [X] `Akka.Dispatch.MessageQueues.MessageQueue, Akka` (Public)
- [X] `Akka.Dispatch.MultipleConsumerSemantics, Akka` (Public)
- [X] `Akka.Dispatch.RequiresMessageQueue`1, Akka` (Public)
- [X] `Akka.Dispatch.Semantics, Akka` (Public)
- [X] `Akka.Dispatch.SysMsg.SystemMessage, Akka` (Public)
- [X] `Akka.Dispatch.UnboundedDequeBasedMessageQueueSemantics, Akka` (Public)
- [X] `Akka.Dispatch.UnboundedMessageQueueSemantics, Akka` (Public)
- [X] `Akka.Event.LoggingAdapter, Akka` (Public)
- [X] `Akka.FluentConfigInternals, Akka` (Public)
- [X] `Akka.Remote.InboundMessageDispatcher, Akka.Remote`
- [X] `Akka.Remote.RemoteRef, Akka.Remote`
- [X] `Akka.Routing.ConsistentHashable, Akka` (Public)
`ConsistentHashRouter` and `IConsistentHashable`**
Akka.NET v1.0 introduces the idea of virtual nodes to the `ConsistentHashRouter`, which are designed to provide more even distributions of hash ranges across a relatively small number of routees. You can take advantage of virtual nodes via configuration:
```xml
akka.actor.deployment {
/router1 {
router = consistent-hashing-pool
nr-of-instances = 3
virtual-nodes-factor = 17
}
}
```
Or via code:
```csharp
var router4 = Sys.ActorOf(Props.Empty.WithRouter(
new ConsistentHashingGroup(new[]{c},hashMapping: hashMapping)
.WithVirtualNodesFactor(5)),
"router4");
```
`ConsistentHashMapping` Delegate**
There are three ways to instruct a router to hash a message:
1. Wrap the message in a `ConsistentHashableEnvelope`;
2. Implement the `IConsistentHashable` interface on your message types; or
3. Or, write a `ConsistentHashMapper` delegate and pass it to a `ConsistentHashingGroup` or a `ConsistentHashingPool` programmatically at create time.
Here's an example, taken from the `ConsistentHashSpecs`:
```csharp
ConsistentHashMapping hashMapping = msg =>
{
if (msg is Msg2)
{
var m2 = msg as Msg2;
return m2.Key;
}
return null;
};
var router2 =
Sys.ActorOf(new ConsistentHashingPool(1, null, null, null, hashMapping: hashMapping)
.Props(Props.Create<Echo>()), "router2");
```
Alternatively, you don't have to pass the `ConsistentHashMapping` into the constructor - you can use the `WithHashMapping` fluent interface built on top of both `ConsistentHashingGroup` and `ConsistentHashingPool`:
```csharp
var router2 =
Sys.ActorOf(new ConsistentHashingPool(1).WithHashMapping(hashMapping)
.Props(Props.Create<Echo>()), "router2");
```
`ConsistentHashable` renamed to `IConsistentHashable`**
Any objects you may have decorated with the `ConsistentHashable` interface to work with `ConsistentHashRouter` instances will need to implement `IConsistentHashable` going forward, as all interfaces have been renamed with the `I-` prefix per .NET naming conventions.
Akka.DI.Unity NuGet Package**
Akka.NET now ships with dependency injection support for [Unity](https://unity.codeplex.com/).
You can install our Unity package via the following command in the NuGet package manager console:
```
PM> Install-Package Akka.DI.Unity
```
----