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.
References: intro, features, slides and discussion.
Features
- Message-based api with auto-generation of Orleans' interfaces
- Special api bindings for C# and F# (DU, Pattern Matching, Tasks, Custom DSL)
- Simplified programmatic configuration via fluent DSL (client, cluster, embedded, playground)
- Convenient unit testing kit (stubs, mocks, expectations)
- Redesigned streams api (actor subscriptions)
- Declarative regex-based stream subscriptions (great for CQRS/ES projections)
- Content-based filtering support for stream subscriptions (both imperative and declarative)
- Switchable actor behaviors with built-in hierarchical FSM (behaviors)
- Poweful actor/proxy invocation interceptors
How to install
To install client Orleankka library via NuGet, run this command in NuGet package manager console:
PM> Install-Package Orleankka
For server-side library:
PM> Install-Package Orleankka.Runtime
Check out "Getting started" guide: C# , F#.
Build sources
Clone repository and run the following in CLI from solution's root folder:
PM> Nake.bat
This will restore dependencies and build everything in debug
mode. Run Nake.bat
with -T
switch to see available commands.
Packages
Examples
C#
- "WebScan" [demo]
- TestKit [demo]
- Event Sourcing
- Reentrant messages [rw-x]
- Azure cloud service [hub]
- Client-side observers [chat]
- Streams [chat]
F#
- Hello, world! [demo]
- Chat [client] [server] [shared]
- eCommerce [demo]
- Reentrant messages [demo]
- Streams [client] [server] [shared]
- Suave web server [see]
Dependency Injection
Documentation
Complete documentation could be found on wiki.
Known issues
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
Contributing
Bug-fix pull requests are always welcome. For new features or modifications, please first create an issue, so we can discuss it before any effort is wasted.
Community
License
Apache 2 License