Skip to content

EMQX Retained Messages Not Working

DodaTech Updated 2026-06-26 1 min read

In this tutorial, you'll learn about EMQX Retained Messages Not Working. We cover key concepts, practical examples, and best practices.

The Problem

Clients do not receive retained messages when subscribing.

Quick Fix

Wrong

mqttx pub -t sensor/temp -m '25.5'  # No retain flag set
New subscribers do not receive last known value.
# 1. Publish with retain flag
mqttx pub -t sensor/temp -m '25.5' -r

# 2. Verify retained message
mqttx sub -t sensor/temp --retain-only

# 3. Check EMQX retained message store
curl -u admin:public http://localhost:18083/api/v5/messages/retained/sensor/temp

# 4. Subscribe (new subscriber gets retained value)
mqttx sub -t sensor/temp -v
Subscriber immediately receives "25.5" with retain flag set.

Prevention

Set retain flag on PUBLISH to store the message. Retained messages survive broker restarts (persisted by default). Publish empty payload with retain=true to clear a retained message. Retained messages use QoS 1 by default. Configure max retained messages in emqx.conf: mqtt.retained.max_count.

DodaTech engineers apply these same patterns across Doda Browser, DodaZIP, and Durga Antivirus Pro for production IoT reliability.

FAQ

### How long are retained messages stored?

Until overwritten by a new retained message on the same topic, or deleted by publishing zero-length payload with retain=true.

Can I see all retained messages?

Yes: curl http://localhost:18083/api/v5/messages/retained. Or subscribe to $SYS/broker/retained/#.

Do retained messages persist after restart?

Yes. EMQX stores retained messages in its built-in database (Mnesia). They survive broker restarts.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro