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

text
Publisher (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

QoSGuaranteeUse Case
0At most once (fire and forget)Non-critical sensor data
1At least once (may duplicate)Most IoT use cases
2Exactly 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.

text
Producer → [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

FeatureMQTTAMQP
Design goalIoT / constrained devicesEnterprise messaging
Protocol overheadVery lightweight (2-byte header)Heavier
Message routingTopic-based pub/subFlexible (queues, exchanges, routing keys)
Broker examplesMosquitto, HiveMQ, AWS IoTRabbitMQ, Azure Service Bus
QoS levels0, 1, 2Full transactional support
PersistenceOptionalBuilt-in
Use caseIoT sensors, telemetry, mobileMicroservices, financial systems
Port1883 (8883 for TLS)5672 (5671 for TLS)

When to Use Which

Use CaseProtocol
IoT sensors / smart devicesMQTT
Real-time mobile notificationsMQTT
Low-bandwidth connectionsMQTT
Order processing systemsAMQP
Microservice communicationAMQP
Guaranteed delivery + transactionsAMQP
Chat applicationsMQTT or WebSockets

Summary: MQTT = lightweight IoT messaging. AMQP = enterprise-grade reliable messaging with routing, queues, and transactions.