Messenger
Sync bus + async transports live in serenade-messenger (#11, Redis wire #209).
Sync bus
Section titled “Sync bus”| Type | Role |
|---|---|
Message / Command / Event |
Stable NAME + marker traits |
MessageBus |
Register handlers; dispatch_command / dispatch_event |
Middleware |
Logging / validation layers |
In-process async adapter
Section titled “In-process async adapter”| Type | Role |
|---|---|
Envelope |
Type-erased Any payload (process-local only) |
Transport |
Async send contract |
InMemoryTransport |
FIFO queue for tests / local workers |
Durable Redis wire (feature redis)
Section titled “Durable Redis wire (feature redis)”Envelope cannot cross the wire (Any). Durable backends use:
| Type | Role |
|---|---|
WireEnvelope |
Message name + opaque payload bytes (app owns serialization) |
RedisTransport |
RPUSH send / LPOP receive on a Redis list |
RedisTransportConfig |
URL, list key, pool options |
use serenade_messenger::{RedisTransport, RedisTransportConfig, WireEnvelope};
let transport = RedisTransport::connect( RedisTransportConfig::new("redis://127.0.0.1:6379/0") .with_list_key("serenade:messenger:default"),)?;let frame = WireEnvelope::new("order.place", serde_json::to_vec(&payload)?)?;transport.send_wire(frame).await?;if let Some(next) = transport.receive_wire().await? { // decode next.payload() in the worker}Related
Section titled “Related”- Kernel overview: KERNEL.md
- Scheduler Messenger bridge: SCHEDULER.md
