[−][src]Crate kompact
The Kompact message-passing framework provides a hybrid approach between the Kompics component model and the Actor model for writing distributed systems.
To get all Kompact related things into scope import use kompact::prelude::*;
instead of use kompact::*;
.
Hello World Example
use kompact::prelude::*; #[derive(ComponentDefinition, Actor)] struct HelloWorldComponent { ctx: ComponentContext<Self> } impl HelloWorldComponent { pub fn new() -> HelloWorldComponent { HelloWorldComponent { ctx: ComponentContext::uninitialised() } } } impl ComponentLifecycle for HelloWorldComponent { fn on_start(&mut self) -> Handled { info!(self.ctx.log(), "Hello World!"); self.ctx().system().shutdown_async(); Handled::Ok } } let system = KompactConfig::default().build().expect("system"); let component = system.create(HelloWorldComponent::new); system.start(&component); system.await_termination();
Crate Feature Flags
The following crate feature flags are available. They are configured in your Cargo.toml.
silent_logging
- Reduces logging to INFO in debug builds and ERROR in release builds
- Must be used with
--no-default-features
low_latency
- Prevents thread pool threads from going to sleep when using the default pool.
- This can improve reaction time to incoming network events, at the cost of much higher CPU utilisation.
ser_id_64
(default),ser_id_32
,ser_id_16
,ser_id_8
- Selects the bit-width of serialisation identifiers.
- Trying to use a serialisation id that is too large for the selected width will result in a compile-time error.
- All values are mutually exclusive and all but the default of
ser_id_64
must be used with--no-default-features
.
thread_pinning
- Enables support for pinning pool threads to CPU cores (or rather processing units).
- This flag has no effect if the runtime OS does not support thread pinning.
- Enabling this will cause as many threads as there are PUs to be pinned by default.
- Assignments can be customised by providing a custom scheduler with the desired settings.
- See executors crate for more details.
serde_support
(default)- Build with support for Serde serialisers.
type_erasure
(nightly-only)- Build with an experimental API for
dyn
type-erased components.
- Build with an experimental API for
use_local_executor
(default)- Use thread-local executors to avoid cloning the handle to the system scheduler for every component scheduling.
- Not all scheduler implementations support this feature, so you might have to disable it via
--no-default-features
if you are using a custom scheduler.
implicit_routes
(default)- Allow default broadcast and select actor paths on any node in the tree, not just where explicitly set via set_routing_policy.
- While this feature is convenient, it may open up your system to DoS attacks via broadcast on high-level nodes (e.g.
tcp://1.2.3.4:8000/*
). - If you are concered about this security risk, you can disable this feature by using
--no-default-features
.
Re-exports
pub use executors; |
Modules
component | Traits and structs for component API and internals |
constants | Useful Kompact constants are re-exported in this module |
default_components | Default implementations for system components |
doctest_helpers | Helper structs and functions for doctests. |
lookup | Data structures for looking up the dispatch/routing table. |
messaging | Facilities and utilities for dealing with network messages Messaging types for sending and receiving messages between remote actors. |
net | Default networking implementation |
prelude | To get all kompact related things into scope import as |
prelude_bench | A module containing helper functions for benchmarking |
prelude_test | A module containing helper functions for (unit) testing |
routing | Facilities for routing messages |
runtime | Kompact system runtime facilities, such as configuration and schedulers |
serde_serialisers | Provides serialisation support for Serde |
timer | Reusable timer facility internals |
Macros
ignore_control | Deprecated A macro that provides an empty implementation of ComponentLifecycle for the given component |
ignore_indications | A macro that provides an empty implementation of the required handler for the given |
ignore_lifecycle | A macro that provides an empty implementation of ComponentLifecycle for the given component |
ignore_requests | A macro that provides an empty implementation of the provided handler for the given |
info_lifecycle | A macro that provides an implementation of ComponentLifecycle for the given component that logs the lifecycle stages at INFO log level. |
let_irrefutable | A macro that provides a shorthand for an irrefutable let binding, that the compiler cannot determine on its own |
match_deser | A macro to make matching serialisation ids and deserialising easier |
Type Definitions
JoinHandle | A type of future returned from the spawn and spawn_off functions to await the completion of the spawned future. |
KompactLogger | A simple type alias Kompact's slog |
Never | A more readable placeholder for a stable Never ( |