#storage #message-queue #redis #redis-cluster #plugin #forwarded #expiration #ram #message-broker

rmqtt-message-storage

Published messages are stored until expiration and forwarded to new matching subscriptions. They’re cleared automatically after expiring.

15 releases (7 breaking)

0.21.0 May 30, 2026
0.19.1 Mar 29, 2026
0.18.1 Dec 8, 2025
0.18.0 Nov 30, 2025
0.1.3 Jul 6, 2025

#12 in #redis-cluster


Used in 2 crates

MIT/Apache

565KB
13K SLoC

English | 简体中文

rmqtt-message-storage

crates.io

Message persistence plugin. Stores unexpired messages for offline clients.

Usage

[dependencies]
rmqtt-message-storage = { version = "0.22", features = ["ram"] }
# or: features = ["redis", "redis-cluster"]
rmqtt_message_storage::register(&scx, true, false).await?;

Configuration

File: rmqtt-message-storage.toml

Storage Type

Option Type Default Description
storage.type string "ram" Backend storage type: ram, redis, or redis-cluster

RAM Backend

Option Type Default Description
storage.ram.cache_capacity string "3G" In-memory cache capacity
storage.ram.cache_max_count integer 1_000_000 Maximum cache entry count
storage.ram.encode boolean true Enable message encoding

Redis Backend

Option Type Default Description
storage.redis.url string "redis://127.0.0.1:6379/" Redis server URL
storage.redis.prefix string "message-{node}" Key prefix ({node} = node ID placeholder)

Redis Cluster Backend

Option Type Default Description
storage.redis-cluster.urls array of string ["redis://127.0.0.1:6380/", ...] Redis cluster node URLs
storage.redis-cluster.prefix string "message-{node}" Key prefix

Cleanup

Option Type Default Description
cleanup_count integer 5000 Expired messages cleaned per cycle

Dependencies

rmqtt (features: plugin, msgstore), redis (optional)

License

MIT OR Apache-2.0

Dependencies

~26–46MB
~688K SLoC