Orleankka is a functional API for Microsoft Orleans framework. It is highly suitable for scenarios where having composable, uniform communication interface is preferable, such as: CQRS, event-sourcing, re-routing, FSM, etc.
Orleankka is not just a translation layer on top of Orleans. Besides improved language support, Orleannka brings several new important features and fixes a lot of small-to-medium annoyances, constraints and some of the major limitations, currently present in Orleans' programming model.
References: video, slides and discussion.
- Pluggable serialization protocols
- Dependency injection support
- Simplified configuration via fluent DSL (client, cluster, azure, embedded)
- Programmable from any .NET language
- Message interception via higher-order catch-all function (AOP)
- Automatic GC with configurable keep-alive timeouts
- Runtime independence (isolated testing)
- Reentrant messages
- Special api for F# (DU, Pattern Matching, Tasks, Custom DSL)
- Convenient unit testing kit (stubs, mocks, expectations)
- Push-based notifications with observers
- Reactive Extensions (RX) support (client-side observers only)
- Improved exception handling
To install Orleankka via NuGet, run this command in NuGet package manager console:
PM> Install-Package Orleankka
Check out "Getting started" guide (F#).
[inside] | ||
---|---|---|
Orleankka.FSharp | Special api for F# | |
Orleankka.TestKit | Unit testing kit | |
Orleankka.Azure | Fluent configuration for Azure |
- .NET binary [default]
- Orleans native (codegened) [built-in]
- Newtonsoft.JSON [see]
Complete documentation could be found on wiki.
Integration tests (those using real actor system) won't work with XUnit visual studio runner due to inability to disable shadow copy xunit/visualstudio.xunit#9
Any bug-fix pull request goes without a saying. For new features or modifications, please first create an issue, so we can discuss it before any effort is made. Add-ons, like new serialization or communication protocols, DI container support, FSM, etc - are highly welcomed!
Apache 2 License