The intended use of a protocol often influences its design; that is certainly the case for
these. Both protocols ʻsitʼ above TCP/IP, and are intended to be used to allow programs to
send and receive messages asynchronously irrespective of their choice of hardware,
operating system or programming language. However, from that basis, the protocols
diverge; MQTT is designed to be of use for many small, relatively dumb devices sending
small messages on low-bandwidth networks. AMQP, on the other hand, is designed to
provide the full vibrancy of messaging scenarios that have been seen in the last 25 years.
MQTTʼs design goals are a subset of its intended uses.
In particular, MQTT very much sees the network between the involved parties as a
controlled, near private infrastructure; AMQP, on the other hand, is designed assuming it is
in use between parties under different controls and who use network and infrastructure
resources outside of those partiesʼ control.