What is MQTT and AMQP , What is the difference between them?
Answer
Overview
MQTT and AMQP are both messaging protocols used for communication between systems, but they are designed for very different use cases.
MQTT (Message Queuing Telemetry Transport)
A lightweight publish/subscribe messaging protocol designed for IoT and constrained networks (low bandwidth, high latency, unreliable connections).
How MQTT Works
textPublisher (device) → [MQTT Broker] → Subscriber (app) (e.g., Mosquitto, AWS IoT, HiveMQ)
dart// Flutter MQTT client import 'package:mqtt_client/mqtt_client.dart'; import 'package:mqtt_client/mqtt_server_client.dart'; final client = MqttServerClient('broker.hivemq.com', 'flutter_client'); client.port = 1883; await client.connect(); // Subscribe to a topic client.subscribe('sensors/temperature', MqttQos.atLeastOnce); // Receive messages client.updates!.listen((List<MqttReceivedMessage<MqttMessage>> messages) { final msg = messages[0].payload as MqttPublishMessage; final payload = MqttPublishPayload.bytesToStringAsString(msg.payload.message); print('Temperature: $payload'); }); // Publish message final builder = MqttClientPayloadBuilder()..addString('25.5°C'); client.publishMessage('sensors/temperature', MqttQos.atLeastOnce, builder.payload!);
MQTT QoS Levels
| QoS | Guarantee | Use Case |
|---|---|---|
| 0 | At most once (fire and forget) | Non-critical sensor data |
| 1 | At least once (may duplicate) | Most IoT use cases |
| 2 | Exactly once (guaranteed) | Financial, critical alerts |
AMQP (Advanced Message Queuing Protocol)
A full-featured enterprise messaging protocol designed for reliable, transactional message queuing between business systems.
textProducer → [Exchange] → [Queue] → Consumer (RabbitMQ, Azure Service Bus, ActiveMQ)
dart// AMQP in Flutter — via dart_amqp package import 'package:dart_amqp/dart_amqp.dart'; final client = Client(settings: ConnectionSettings( host: 'rabbitmq.example.com', authProvider: PlainAuthenticator('user', 'password'), )); final channel = await client.channel(); final queue = await channel.queue('order-processing'); // Publish a message queue.publish('{"orderId": 123, "status": "PAID"}'); // Consume messages await queue.consume().then((consumer) { consumer.listen((message) { print('Processing order: ${message.payloadAsString}'); message.ack(); // Acknowledge processing }); });
Key Differences
| Feature | MQTT | AMQP |
|---|---|---|
| Design goal | IoT / constrained devices | Enterprise messaging |
| Protocol overhead | Very lightweight (2-byte header) | Heavier |
| Message routing | Topic-based pub/sub | Flexible (queues, exchanges, routing keys) |
| Broker examples | Mosquitto, HiveMQ, AWS IoT | RabbitMQ, Azure Service Bus |
| QoS levels | 0, 1, 2 | Full transactional support |
| Persistence | Optional | Built-in |
| Use case | IoT sensors, telemetry, mobile | Microservices, financial systems |
| Port | 1883 (8883 for TLS) | 5672 (5671 for TLS) |
When to Use Which
| Use Case | Protocol |
|---|---|
| IoT sensors / smart devices | MQTT |
| Real-time mobile notifications | MQTT |
| Low-bandwidth connections | MQTT |
| Order processing systems | AMQP |
| Microservice communication | AMQP |
| Guaranteed delivery + transactions | AMQP |
| Chat applications | MQTT or WebSockets |
Summary: MQTT = lightweight IoT messaging. AMQP = enterprise-grade reliable messaging with routing, queues, and transactions.