123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- <?xml version='1.0' encoding='UTF-8'?>
- <?xml-stylesheet type="text/xsl" href="manpage.xsl"?>
- <refentry xml:id="mqtt" xmlns:xlink="http://www.w3.org/1999/xlink">
- <refmeta>
- <refentrytitle>mqtt</refentrytitle>
- <manvolnum>7</manvolnum>
- <refmiscinfo class="source">Mosquitto Project</refmiscinfo>
- <refmiscinfo class="manual">Conventions and miscellaneous</refmiscinfo>
- </refmeta>
- <refnamediv>
- <refname>mqtt</refname>
- <refpurpose>MQ Telemetry Transport</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>MQTT</command>
- </cmdsynopsis>
- </refsynopsisdiv>
- <refsect1>
- <title>Description</title>
- <para><command>MQTT</command> is a lightweight publish/subscribe
- messaging protocol. It is useful for use with low power sensors, but
- is applicable to many scenarios.</para> <para>This manual describes
- some of the features of MQTT version 3.1.1/3.1, to assist end users in
- getting the most out of the protocol. For more complete information on
- MQTT, see <uri type="webpage">http://mqtt.org/</uri>.</para>
- </refsect1>
- <refsect1>
- <title>Publish/Subscribe</title>
- <para>The MQTT protocol is based on the principle of publishing
- messages and subscribing to topics, or "pub/sub". Multiple clients
- connect to a broker and subscribe to topics that they are interested
- in. Clients also connect to the broker and publish messages to topics.
- Many clients may subscribe to the same topics and do with the
- information as they please. The broker and MQTT act as a simple, common
- interface for everything to connect to. This means that you if you have
- clients that dump subscribed messages to a database, to Twitter,
- Cosm or even a simple text file, then it becomes very simple to add
- new sensors or other data input to a database, Twitter or so on.</para>
- </refsect1>
- <refsect1>
- <title>Topics/Subscriptions</title>
- <para>Messages in MQTT are published on topics. There is no need to
- configure a topic, publishing on it is enough. Topics are treated as a
- hierarchy, using a slash (/) as a separator. This allows sensible
- arrangement of common themes to be created, much in the same way as a
- filesystem. For example, multiple computers may all publish their
- hard drive temperature information on the following topic, with their
- own computer and hard drive name being replaced as appropriate:</para>
- <itemizedlist>
- <listitem><para>sensors/COMPUTER_NAME/temperature/HARDDRIVE_NAME</para></listitem>
- </itemizedlist>
- <para>Clients can receive messages by creating subscriptions. A
- subscription may be to an explicit topic, in which case only messages
- to that topic will be received, or it may include wildcards. Two
- wildcards are available, <option>+</option> or <option>#</option>.</para>
- <para><option>+</option> can be used as a wildcard for a single level
- of hierarchy. It could be used with the topic above to get information
- on all computers and hard drives as follows:</para>
- <itemizedlist>
- <listitem><para>sensors/+/temperature/+</para></listitem>
- </itemizedlist>
- <para>As another example, for a topic of "a/b/c/d", the following
- example subscriptions will match:</para>
- <itemizedlist mark="circle">
- <listitem><para>a/b/c/d</para></listitem>
- <listitem><para>+/b/c/d</para></listitem>
- <listitem><para>a/+/c/d</para></listitem>
- <listitem><para>a/+/+/d</para></listitem>
- <listitem><para>+/+/+/+</para></listitem>
- </itemizedlist>
- <para>The following subscriptions will not match:</para>
- <itemizedlist mark="circle">
- <listitem><para>a/b/c</para></listitem>
- <listitem><para>b/+/c/d</para></listitem>
- <listitem><para>+/+/+</para></listitem>
- </itemizedlist>
- <para><option>#</option> can be used as a wildcard for all remaining levels of
- hierarchy. This means that it must be the final character in a
- subscription. With a topic of "a/b/c/d", the following example
- subscriptions will match:</para>
- <itemizedlist mark="circle">
- <listitem><para>a/b/c/d</para></listitem>
- <listitem><para>#</para></listitem>
- <listitem><para>a/#</para></listitem>
- <listitem><para>a/b/#</para></listitem>
- <listitem><para>a/b/c/#</para></listitem>
- <listitem><para>+/b/c/#</para></listitem>
- </itemizedlist>
- <para>Zero length topic levels are valid, which can lead to some
- slightly non-obvious behaviour. For example, a topic of "a//topic"
- would correctly match against a subscription of "a/+/topic".
- Likewise, zero length topic levels can exist at both the beginning
- and the end of a topic string, so "/a/topic" would match against a
- subscription of "+/a/topic", "#" or "/#", and a topic "a/topic/"
- would match against a subscription of "a/topic/+" or
- "a/topic/#".</para>
- </refsect1>
- <refsect1>
- <title>Quality of Service</title>
- <para>MQTT defines three levels of Quality of Service (QoS). The QoS
- defines how hard the broker/client will try to ensure that a message is
- received. Messages may be sent at any QoS level, and clients may
- attempt to subscribe to topics at any QoS level. This means that the
- client chooses the maximum QoS it will receive. For example, if a
- message is published at QoS 2 and a client is subscribed with QoS 0,
- the message will be delivered to that client with QoS 0. If a second
- client is also subscribed to the same topic, but with QoS 2, then it
- will receive the same message but with QoS 2. For a second example, if
- a client is subscribed with QoS 2 and a message is published on QoS 0,
- the client will receive it on QoS 0.</para>
- <para>Higher levels of QoS are more reliable, but involve higher
- latency and have higher bandwidth requirements.</para>
- <itemizedlist>
- <listitem><para>0: The broker/client will deliver the message once, with no confirmation.</para></listitem>
- <listitem><para>1: The broker/client will deliver the message at least once, with confirmation required.</para></listitem>
- <listitem><para>2: The broker/client will deliver the message exactly once by using a four step handshake.</para></listitem>
- </itemizedlist>
- </refsect1>
- <refsect1>
- <title>Retained Messages</title>
- <para>All messages may be set to be retained. This means that the
- broker will keep the message even after sending it to all current
- subscribers. If a new subscription is made that matches the topic of
- the retained message, then the message will be sent to the client. This
- is useful as a "last known good" mechanism. If a topic is only updated
- infrequently, then without a retained message, a newly subscribed
- client may have to wait a long time to receive an update. With a
- retained message, the client will receive an instant update.</para>
- </refsect1>
- <refsect1>
- <title>Clean session / Durable connections</title>
- <para>On connection, a client sets the "clean session" flag, which is
- sometimes also known as the "clean start" flag. If clean session is set
- to false, then the connection is treated as durable. This means that
- when the client disconnects, any subscriptions it has will remain and
- any subsequent QoS 1 or 2 messages will be stored until it connects
- again in the future. If clean session is true, then all subscriptions
- will be removed for the client when it disconnects.</para>
- </refsect1>
- <refsect1>
- <title>Wills</title>
- <para>When a client connects to a broker, it may inform the broker that
- it has a will. This is a message that it wishes the broker to send when
- the client disconnects unexpectedly. The will message has a topic,
- QoS and retain status just the same as any other message.</para>
- </refsect1>
- <refsect1>
- <title>See Also</title>
- <simplelist type="inline">
- <member>
- <citerefentry>
- <refentrytitle><link xlink:href="mosquitto-8.html">mosquitto</link></refentrytitle>
- <manvolnum>8</manvolnum>
- </citerefentry>
- </member>
- <member>
- <citerefentry>
- <refentrytitle><link xlink:href="mosquitto_pub-1.html">mosquitto_pub</link></refentrytitle>
- <manvolnum>1</manvolnum>
- </citerefentry>
- </member>
- <member>
- <citerefentry>
- <refentrytitle><link xlink:href="mosquitto_sub-1.html">mosquitto_sub</link></refentrytitle>
- <manvolnum>1</manvolnum>
- </citerefentry>
- </member>
- </simplelist>
- </refsect1>
- <refsect1>
- <title>Author</title>
- <para>Roger Light <email>roger@atchoo.org</email></para>
- </refsect1>
- </refentry>
|