Expand description
Message proxy (broker) implementation for ZeroMQ patterns.
A proxy connects frontend and backend sockets, forwarding messages bidirectionally. This enables common patterns like message brokers, load balancers, and forwarders without application logic.
§Supported Patterns
- PUB-SUB broker: XSUB frontend ←→ XPUB backend
- REQ-REP load balancer: ROUTER frontend ←→ DEALER backend
- PUSH-PULL forwarder: PULL frontend ←→ PUSH backend
§Message Flow
Publishers → XSUB (frontend) → XPUB (backend) → Subscribers
Clients → ROUTER (frontend) → DEALER (backend) → Workers§Example: PUB-SUB Broker
ⓘ
use monocoque_zmtp::proxy::{proxy, ProxySocket};
use monocoque_zmtp::xsub::XSubSocket;
use monocoque_zmtp::xpub::XPubSocket;
#[compio::main]
async fn main() -> std::io::Result<()> {
// Publishers connect to 5555
let mut frontend = XSubSocket::bind("127.0.0.1:5555").await?;
// Subscribers connect to 5556
let mut backend = XPubSocket::bind("127.0.0.1:5556").await?;
// Forward messages and subscriptions bidirectionally
proxy(&mut frontend, &mut backend, None).await?;
Ok(())
}§Example: REQ-REP Load Balancer
ⓘ
use monocoque_zmtp::proxy::{proxy, ProxySocket};
use monocoque_zmtp::router::RouterSocket;
use monocoque_zmtp::dealer::DealerSocket;
#[compio::main]
async fn main() -> std::io::Result<()> {
// Clients connect to 5555
let mut frontend = RouterSocket::bind("127.0.0.1:5555").await?;
// Workers connect to 5556
let mut backend = DealerSocket::bind("127.0.0.1:5556").await?;
// Load balance requests across workers
proxy(&mut frontend, &mut backend, None).await?;
Ok(())
}Enums§
- Proxy
Command - Control commands for steerable proxy.
Traits§
- Proxy
Socket - Socket types that can participate in a proxy.
Functions§
- proxy
- Run a bidirectional message proxy between frontend and backend sockets.
- proxy_
steerable - Run a steerable bidirectional message proxy with control socket.