15 releases
0.1.13 | May 4, 2023 |
---|---|
0.1.12 | Dec 2, 2022 |
0.1.10 | Nov 15, 2022 |
0.1.9 | Jul 3, 2022 |
0.0.0 | Aug 12, 2020 |
#631 in Asynchronous
80 downloads per month
Used in scylladb
260KB
6K
SLoC
Actor framework for building data driven distributed systems
About
Overclock is an actor model framework inspired by Elixir, enforces supervision tree and interoperability.
Features
- Async
- Based on Tokio
- Multiple channel types
- Actor local store, accessible through directory path interface
- Websocket server for RPC communication
- Built-in config support
- Dynamic Topology
- Reusable actors
- Promethues supports
- Communication
Usage
Add overclock to your Cargo.toml:
[dependencies]
overclock = "0.1"
Implement Actor trait
use overclock::core::*;
// Define your actor struct
#[derive(Debug, Serialize, Deserialize, PartialEq, Default)]
struct HelloWorld;
#[async_trait::async_trait]
impl<S> Actor<S> for HelloWorld
where
S: SupHandle<Self>,
{
// Temporary state or resources during the actor lifecycle
type Data = usize;
// Interval channel which will yield Instant every 1000ms;
type Channel = IntervalChannel<1000>;
async fn init(&mut self, rt: &mut Rt<Self, S>) -> ActorResult<Self::Data> {
log::info!("HelloWorld: {}", rt.service().status());
let counter = 0;
Ok(counter)
}
async fn run(&mut self, rt: &mut Rt<Self, S>, mut counter: Self::Data) -> ActorResult<()> {
log::info!("HelloWorld: {}", rt.service().status());
while let Some(event) = rt.inbox_mut().next().await {
if counter == 3 {
counter += 1;
log::info!("HelloWorld: Received instant {:?}, counter: {}", event, counter);
} else {
break
}
}
log::info!("HelloWorld: exited its event loop");
Ok(())
}
}
#[tokio::main]
async fn main() {
let runtime = Runtime::from_config::<HelloWorld>().await.expect("Runtime to run");
runtime.block_on().await.expect("Runtime to shutdown gracefully");
}
Run the above illustrated example
cargo run --features="ron_config"
Contributing
All contributions are welcome!
LICENSE
This project is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
COPYRIGHT
Copyright (C) 2022 Louay Kamel
Copyright (C) 2021 IOTA Stiftung
Dependencies
~9–44MB
~711K SLoC