-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Akka.NET v1.0 official release #829
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Refactor suspend children
ActorCell already implements IActionContext via IUntypedActorContext
…stRestartPermission Refactor childStats requestRestartPermission algorithm
Fixes whitespacing and unused references in ChildrenContainerBase.cs
This reverts commit a435803. The previous version was optimized for the most common scenario, when exceptFor == null. The LINQ expression introduced in akkadotnet#691 is creating a list every time and uses more enumerators.
Added meaningful ToString() to all system messages
…ing-requestRestartPermission Revert "Refactor childStats requestRestartPermission algorithm"
Add info on Title and Description for a PR in CONTRIBUTING.md
Revert parts of akkadotnet#691 "refactor suspend children"
Add documentation to Watch & Unwatch
Added support to the F# API for actor objects
…portSpec-#624 akkadotnet#624 port GenericTransportSpec
helps resolve akkadotnet#673 Reimplemented Murmur3, ConsistentHashRouting to use virtual nodes Added deploy and routerconfig fallback support Rewrote ActorOf method to LocalActorRefProvider to match Akka Rewrote ActorOf method to RemoteActorRefProvider to match Akka Breaking change - renamed ConsistentHashable interface to IConsistentHashable (per akkadotnet#633) Added MultiNodeTests for ClusterConsistentHashRouting Implemented Pool routers for Akka.Cluster
…ere not working within mono on linux.
Change ordering within ActorSelection to fix issue where /foo paths were...
Reflects changes from conversation in akkadotnet#718.
Generated via the script in the tools directory. The only changes made to any files in this commit are the additions of comments in the beginning. Solution builds and all tests pass.
This reverts commit 041c741.
Because clicking a dialog every time a file is opened is not fun for most people.
Generated via the script in the tools directory. All CS / FS files now contain this copyright language. The only changes made to the files in this commit are the addition of the comments. The build still works and all expected tests pass.
Added LearnAkka.NET link in footer
Move from CloudCopy --> AzCopy
…-add-copyrights
fixed bug with AzCopy in FAKE
…uris API docs: changed URLs to hashed member names
Removed CloudCopy per akkadotnet#822
fixed AzCopy MIME type encoding
Script to add Copyright headers & modify files to add header
Updated PR for fixing F# discriminated unions
Akka.NET V1.0 release notes
Aaronontheweb
added a commit
that referenced
this pull request
Apr 9, 2015
Akka.NET v1.0 official release
@stefansedich is that a young @rogeralsing I see? |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
1.0.0 Apr 09 2015
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:
Updated Packages with 1.0 Stable Release
All of the following NuGet packages have been upgraded to 1.0 for stable release:
The following packages (and modules dependent on them) are still in pre-release status:
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!
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!
API Changes in v1.0
All methods returning an
ActorRef
now returnIActorRef
This is the most significant breaking change introduced in AKka.NET v1.0. Rather than returning the
ActorRef
abstract base class from all of theActorOf
,Sender
and other methods we now return an instance of theIActorRef
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:
ActorRef
-->IActorRef
ActorRef.Nobody
-->ActorRefs.Nobody
ActorRef.NoSender
-->ActorRefs.NoSender
ActorRef
's operators==
and!=
has been removed. This means all expressions likeactorRef1 == actorRef2
must be replaced withEquals(actorRef1, actorRef2)
Tell(object message)
, i.e. the implicit sender overload, has been movedto an extension method, and requires
using Akka.Actor;
to be accessible.ActorRef
toRoutee
has been replaced withRoutee.FromActorRef(actorRef)
async
/await
SupportReceiveActor
s now support Async/Await out of the box.It is also possible to specify the behavior for the async handler, using
AsyncBehavior.Suspend
andAsyncBehavior.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 theawait
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
andReceiveActor
we've updated the methods to the following: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 theScheduler
are still available, only in different packaging than they were before.Here are the new APIs:
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.configIn previous versions Akka.NET users had to do the following to load Akka.NET HOCON configuration sections from App.config or Web.config:
As of Akka.NET v1.0 this is now done for you automatically:
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
to create a dedicated set of threads for the exclusive use of the actors configured to use a particularForkJoinDispatcher
instance. All of the remoting actors depend on thedefault-remote-dispatcher
for instance.Here's how you can create your own ForkJoinDispatcher instances via Config:
You can then use this specific
ForkJoinDispatcher
instance by configuring specific actors to use it, whether it's via config or the fluent interface onProps
:Config
Props
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.FluentConfigF# 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:Akka.Actor.ActorRefProvider, Akka
(Public)Akka.Actor.ActorRefScope, Akka
(Public)Akka.Actor.AutoReceivedMessage, Akka
(Public)Akka.Actor.Cell, Akka
(Public)Akka.Actor.Inboxable, Akka
(Public)Akka.Actor.IndirectActorProducer, Akka
(Public)Akka.Actor.Internal.ChildrenContainer, Akka
(Public)Akka.Actor.Internal.ChildStats, Akka
(Public)Akka.Actor.Internal.InternalSupportsTestFSMRef
2, Akka` (Public)Akka.Actor.Internal.SuspendReason+WaitingForChildren, Akka
Akka.Actor.Internals.InitializableActor, Akka
(Public)Akka.Actor.LocalRef, Akka
Akka.Actor.LoggingFSM, Akka
(Public)Akka.Actor.NoSerializationVerificationNeeded, Akka
(Public)Akka.Actor.PossiblyHarmful, Akka
(Public)Akka.Actor.RepointableRef, Akka
(Public)Akka.Actor.WithBoundedStash, Akka
(Public)Akka.Actor.WithUnboundedStash, Akka
(Public)Akka.Dispatch.BlockingMessageQueueSemantics, Akka
(Public)Akka.Dispatch.BoundedDequeBasedMessageQueueSemantics, Akka
(Public)Akka.Dispatch.BoundedMessageQueueSemantics, Akka
(Public)Akka.Dispatch.DequeBasedMailbox, Akka
(Public)Akka.Dispatch.DequeBasedMessageQueueSemantics, Akka
(Public)Akka.Dispatch.MessageQueues.MessageQueue, Akka
(Public)Akka.Dispatch.MultipleConsumerSemantics, Akka
(Public)Akka.Dispatch.RequiresMessageQueue
1, Akka` (Public)Akka.Dispatch.Semantics, Akka
(Public)Akka.Dispatch.SysMsg.SystemMessage, Akka
(Public)Akka.Dispatch.UnboundedDequeBasedMessageQueueSemantics, Akka
(Public)Akka.Dispatch.UnboundedMessageQueueSemantics, Akka
(Public)Akka.Event.LoggingAdapter, Akka
(Public)Akka.FluentConfigInternals, Akka
(Public)Akka.Remote.InboundMessageDispatcher, Akka.Remote
Akka.Remote.RemoteRef, Akka.Remote
Akka.Routing.ConsistentHashable, Akka
(Public)ConsistentHashRouter
andIConsistentHashable
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:Or via code:
ConsistentHashMapping
DelegateThere are three ways to instruct a router to hash a message:
ConsistentHashableEnvelope
;IConsistentHashable
interface on your message types; orConsistentHashMapper
delegate and pass it to aConsistentHashingGroup
or aConsistentHashingPool
programmatically at create time.Here's an example, taken from the
ConsistentHashSpecs
:Alternatively, you don't have to pass the
ConsistentHashMapping
into the constructor - you can use theWithHashMapping
fluent interface built on top of bothConsistentHashingGroup
andConsistentHashingPool
:ConsistentHashable
renamed toIConsistentHashable
Any objects you may have decorated with the
ConsistentHashable
interface to work withConsistentHashRouter
instances will need to implementIConsistentHashable
going forward, as all interfaces have been renamed with theI-
prefix per .NET naming conventions.Akka.DI.Unity NuGet Package
Akka.NET now ships with dependency injection support for Unity.
You can install our Unity package via the following command in the NuGet package manager console: