hermes-client
Asynchronous Rust client to publish and consume events through the Hermes gRPC broker.
Installation
Add the crate to your Cargo.toml:
[]
= "0.2"
= "0.2"
= { = "1", = ["derive"] }
= { = "1", = ["macros", "rt-multi-thread"] }
= "0.3"
Quickstart
Minimal example: define an event with derive(Event), subscribe, then publish.
Note: In fanout mode (no queue groups), subscribers only receive messages published after they connect. Always start the subscriber before publishing.
use StreamExt;
use HermesClient;
use Event;
use ;
async
Event subjects with derive(Event)
By default, #[derive(Event)] generates a subject from module path + type name.
You can override the subject explicitly:
use Event;
use ;
Event groups with event_group!
To subscribe to multiple event types as a single stream, create an EventGroup using event_group!:
use ;
use ;
event_group!;
Then subscribe to the group:
use StreamExt;
use HermesClient;
// let mut stream = client.subscribe_group::<OrderEvents>(&[]).await?;
// while let Some(item) = stream.next().await {
// match item? {
// OrderEvents::OrderCreated(evt) => println!("created: {}", evt.order_id),
// OrderEvents::OrderShipped(evt) => println!("shipped: {}", evt.tracking_id),
// }
// }
Core API
HermesClient::connect(...): connect to brokerpublish(...): fire-and-forget publishsubscribe::<E>(...): typed subscriptionsubscribe_group::<G>(...): event-group subscriptionpublish_durable(...): durable publishsubscribe_durable::<E>(...): durable subscription (at-least-once)publish_raw(...)/subscribe_raw(...): untyped raw API
Notes
- Address must include a scheme, for example
http://127.0.0.1:4222. - Durable features require server-side store configuration.
- See docs.rs for complete API details.