Message IDs and ordering

Ardexa Agent v2.2.0 introduces two major changes:

  • All telemetry events now include a "Message ID" property

    • The message ID is a string containing a 64-bit integer

    • The integer is incremented for each new message

    • The last used ID is cached to disk in case the agent is restarted

    • If the cached number is removed or a new machine is used to replace a broken one, then the Message ID sequence will start again from ZERO (i.e. a message ID of ZERO means the sequence has been reset)

  • All telemetry events will now be sent in order

    • Any backtracking (receiving a previous message ID) means that there were transport problems and the agent is resending the message sequence

    • If the message ID jumps forward, any messages in between are lost e.g. a power outage

AMQP guarantees ordering under the following conditions as described by rabbitmq:

messages published in one channel, passing through one exchange and one queue and one outgoing channel will be received in the same order that they were sent

All the publishing and routing conditions are met, so as long as you only use one outgoing channel, i.e one consumer, then all the messages will arrive in order, verifiable using the Message ID.

Last updated