/
Test Expired Messages

Test Expired Messages

This article is to explain how to generate an “expired” message and how to catch it in the $expired/# topic.

 Instructions

  1. Prepare a HiveMQ broker with a TCP listener on localhost:1883.

  2. On the broker, enable Expired Messages Topic add-on.
    Enabling Expired Messages Topic add-on has 2 workings:

    1. The Expired Messages Topic add-on prefaces the topic of expired messages with $expired/.
      So, if a message published to my/topic/test is expired, it will be published to topic $expired/my/topic/test.

    2. The Expired Messages Topic add-on exposes additional metrics in the HiveMQ standard metrics:

      • com.hivemq.messages.expired-messages

      • com.hivemq.messages.expired.topic.expired.count

        and other metrics.

Following steps explain how to create a situation when a message is expired.

  1. On the localhost, install MQTT CLI command line client.

  2. Start the broker.

  3. To monitor for expired messages, create a client sub-expired with subscription to $expired/# topic filter or a shared subscription $share/shared-expired/$expired:

    mqtt subscribe -i sub-expired -t '$expired/#' -J -d

    where:

    • -i 'sub-expired' – client identifier;

    • -t '$expired/#' – topic filter;

    • -J – output as JSON;

    • -d – verbose output.

  4. Create a client sub-test with subscription to some topic test with a long session expiry and disconnect the client. To disconnect the command line client, terminate its terminal session by pressing Ctrl+C:

    mqtt subscribe -i sub-test -t test -se 6000 --no-cleanStart

    where:

    • -se 6000 – session expiry 600 seconds;

    • --no-cleanStart – persistent session;

  5. In the brokers Control Center → Clients → Refresh View and make sure that the client sub-test is present in the list, subscribed to the topic test and offline.

  6. Publish a message to the topic test from MQTT v.5 client, with a short message expiry and QoS 1.

    mqtt publish -i pub-test -t test -m Hello -V 5 -e 2

    where:

    • -m Hello – message “Hello”;

    • -V 5 – MQTT v.5 client;

    • -e 2 – message expiry 2s;

 

Expected results:

After the message expiry interval (2s) the published message expires and

  1. is published to the topic $expired/test and received by the sub-expired client.

  2. metrics updated
    com.hivemq.messages.expired-messages
    com.hivemq.messages.expired.topic.expired.count

Script for quickly setting up a test environment with HiveMQ with Prometheus and Grafana monitoring: GitHub - guinp1n/docker-hivemq-with-prometheus: Workshop for setting up HiveMQ Monitoring with Prometheus and Grafana

Related content

How to monitor all messages arriving on the broker
How to monitor all messages arriving on the broker
More like this
Outgoing publish message was dropped. Reason: The QoS 0 memory limit exceeded
Outgoing publish message was dropped. Reason: The QoS 0 memory limit exceeded
More like this
MQTT Message Log Extension Log File Configuration
MQTT Message Log Extension Log File Configuration
More like this
Create Trace Recordings for a shared subscription
Create Trace Recordings for a shared subscription
More like this