Expand description
OxiGDAL MQTT - MQTT Protocol Support for IoT and Geospatial Data
This crate provides comprehensive MQTT protocol support for OxiGDAL, enabling real-time IoT sensor data integration, pub/sub messaging, and geospatial data streaming.
§Features
- MQTT 3.1.1 and 5.0 protocol support
- QoS levels 0, 1, and 2 (at-most-once, at-least-once, exactly-once)
- Async client with automatic reconnection
- Publisher with batch publishing and persistence
- Subscriber with topic routing and message handlers
- IoT integration for sensor data, geospatial messages, and time-series
- Pure Rust implementation (COOLJAPAN Policy compliant)
§Examples
§Basic Publisher
use oxigdal_mqtt::client::{ClientConfig, MqttClient};
use oxigdal_mqtt::publisher::{Publisher, PublisherConfig};
use oxigdal_mqtt::types::{ConnectionOptions, Message, QoS};
use std::sync::Arc;
#[tokio::main]
async fn main() -> oxigdal_mqtt::error::Result<()> {
// Create connection options
let conn_opts = ConnectionOptions::new("mqtt://localhost", 1883, "publisher-1");
// Create and connect client
let client_config = ClientConfig::new(conn_opts);
let mut client = MqttClient::new(client_config)?;
client.connect().await?;
// Create publisher
let pub_config = PublisherConfig::new().with_qos(QoS::AtLeastOnce);
let publisher = Publisher::new(Arc::new(client), pub_config);
// Publish message
publisher.publish_simple("sensor/temperature", b"25.5").await?;
Ok(())
}§Basic Subscriber
use oxigdal_mqtt::client::{ClientConfig, MqttClient};
use oxigdal_mqtt::subscriber::{Subscriber, SubscriberConfig};
use oxigdal_mqtt::types::{ConnectionOptions, QoS, TopicFilter};
use std::sync::Arc;
#[tokio::main]
async fn main() -> oxigdal_mqtt::error::Result<()> {
// Create and connect client
let conn_opts = ConnectionOptions::new("mqtt://localhost", 1883, "subscriber-1");
let client_config = ClientConfig::new(conn_opts);
let mut client = MqttClient::new(client_config)?;
client.connect().await?;
// Create subscriber
let sub_config = SubscriberConfig::new();
let subscriber = Subscriber::new(Arc::new(client), sub_config);
// Subscribe to topic
let filter = TopicFilter::new("sensor/+/temperature", QoS::AtLeastOnce);
subscriber.subscribe_callback(filter, |msg| {
println!("Received: {:?}", msg.payload_str());
Ok(())
}).await?;
// Keep running
tokio::signal::ctrl_c().await.ok();
Ok(())
}§IoT Sensor Data
use oxigdal_mqtt::iot::{SensorData, SensorType, IotPublisher};
use oxigdal_mqtt::client::{ClientConfig, MqttClient};
use oxigdal_mqtt::publisher::{Publisher, PublisherConfig};
use oxigdal_mqtt::types::ConnectionOptions;
use std::sync::Arc;
#[tokio::main]
async fn main() -> oxigdal_mqtt::error::Result<()> {
// Setup client and publisher
let conn_opts = ConnectionOptions::new("mqtt://localhost", 1883, "iot-device-1");
let client_config = ClientConfig::new(conn_opts);
let mut client = MqttClient::new(client_config)?;
client.connect().await?;
let pub_config = PublisherConfig::new();
let publisher = Arc::new(Publisher::new(Arc::new(client), pub_config));
// Create IoT publisher
let iot_pub = IotPublisher::new(publisher, "devices/{device_id}/{message_type}");
// Publish sensor data
let sensor_data = SensorData::new("sensor-001", SensorType::Temperature, 25.5.into())
.with_quality(0.95);
iot_pub.publish_sensor(sensor_data).await?;
Ok(())
}Re-exports§
pub use client::ClientConfig;pub use client::MqttClient;pub use error::MqttError;pub use error::Result;pub use publisher::Publisher;pub use publisher::PublisherConfig;pub use subscriber::Subscriber;pub use subscriber::SubscriberConfig;pub use types::Message;pub use types::QoS;pub use types::TopicFilter;
Modules§
- client
- MQTT client implementation
- error
- Error types for MQTT operations
- iot
- IoT integration for MQTT
- publisher
- MQTT publisher implementation
- subscriber
- MQTT subscriber implementation
- types
- Common types for MQTT operations