Expand description
MQTT protocol support for MockForge
This crate provides a complete MQTT 3.1.1 broker implementation for IoT and pub/sub testing scenarios.
§Features
- Full MQTT 3.1.1 Protocol Support: Handles all control packet types including CONNECT, PUBLISH, SUBSCRIBE, and their acknowledgments
- QoS 0, 1, 2 Support: Fire-and-forget, at-least-once, and exactly-once delivery
- Session Management: Clean and persistent sessions with subscription restoration
- Topic Wildcards: Supports + and # wildcards for flexible subscriptions
- Retained Messages: Messages are stored and delivered to new subscribers
§Metrics and Observability
The MQTT broker includes built-in metrics collection for monitoring:
- Connection counts (total and active)
- Message publish/delivery rates
- Subscription tracking
- QoS level distribution
- Error rates and latency
Use MqttMetrics to collect metrics and MqttMetricsExporter to export
in Prometheus format.
§Usage
use mockforge_mqtt::{MqttConfig, start_mqtt_server};
#[tokio::main]
async fn main() {
let config = MqttConfig::default();
start_mqtt_server(config).await.expect("Failed to start MQTT server");
}Re-exports§
pub use broker::MqttBroker;pub use broker::MqttConfig;pub use fixtures::AutoPublishConfig;pub use fixtures::MqttFixture;pub use fixtures::MqttFixtureRegistry;pub use fixtures::MqttResponse;pub use metrics::MqttMetrics;pub use metrics::MqttMetricsExporter;pub use metrics::MqttMetricsSnapshot;pub use protocol::ConnackCode;pub use protocol::ConnackPacket;pub use protocol::ConnectPacket;pub use protocol::Packet;pub use protocol::PacketDecoder;pub use protocol::PacketEncoder;pub use protocol::ProtocolError;pub use protocol::PublishPacket;pub use protocol::QoS as ProtocolQoS;pub use protocol::SubackPacket;pub use protocol::SubackReturnCode;pub use protocol::SubscribePacket;pub use protocol::UnsubscribePacket;pub use server::start_mqtt_dual_server;pub use server::start_mqtt_server;pub use server::start_mqtt_server_with_metrics;pub use server::start_mqtt_tls_server;pub use server::MqttServer;pub use session::SessionManager;pub use spec_registry::MqttSpecRegistry;pub use tls::create_tls_acceptor;pub use tls::create_tls_acceptor_with_client_auth;pub use tls::TlsError;pub use topics::TopicTree;