
История создания
Первая версия протокола была разработан доктором Энди Станфорд-Кларком (IBM) и Арлен Ниппер (Arcom) в 1999 и опубликована под роялти-фри лицензией. Спецификация MQTT 3.1.1 была стандартизирована консорциумом OASIS в 2014 году.
Возможности
В конце девяностых, когда разрабатывался MQTT, каналы связи имели низкую пропускную способность. В результате упор был сделан на минимальную вес сообщения и высокую надежность доставки.
- Прост в использования. Протокол представляет собой программный блок без лишней функциональности, который может быть легко встроен в любую сложную систему;
- Паттерн проектирования издатель-подписчик удобен для большинства решений с датчиками. Дает возможность устройствам выходить на связь и публиковать сообщения, которые не были бы заранее известны или предопределены;
- Легок в администрировании;
- Снижена нагрузку на канал связи. Сообщения, насколько это возможно, несут в себе только полезную нагрузку;
- Работа в условиях постоянной потери связи или других проблем на линии;
- Нет ограничений на формат передаваемого контента.
Реализация
Брокер
Mosquitto - платформа, реализующая возможность обмена сообщениями между компонентами системы на базе стандартов протокола MQTT версии 3.1 и 3.1.1
Mosquitto написан на C и распространяется под лицензией BSD.
Устанавливаем и запускаем
$ apt-get install mosquitto
$ mosquitto
Брокеры могут быть сконфигурированы мостом. Например брокер A может перенаправлять сообщения, пришедшие на определенный канал, брокеру B. Таким образом вы можете масштабировать ваше решение.
Издатель-подписчик
Paho - реализации протокола обмена сообщений MQTT на популярных языках программирования.
- C/C++ (Windows/Unix/Mac/embedded systems)
- Java (J2SE Client/Android Service)
- JavaScript Client
- Python Client
- Go Client
- C# (.Net/WinRT Client)
Примеры на Python
Устанавливаем библиотеку из репозиториев pip. И запускаем брокер mosquitto на локальном хосте.
$ pip install paho-mqtt
Подписчик (Subscriber)
Этот компонент является подписчиком. Подключается к брокеру по умолчанию на порт 1883 и слушает канал (topic) в ожидании новых сообщений.
from paho.mqtt import client
def on_connect(client, userdata, rc):
print("Connected with result code: %s" % rc)
client.subscribe("mqtt/paho/test")
def on_message(client, userdata, msg):
print("%s: %s" % (msg.topic, msg.payload))
def main():
subscriber = client.Client()
subscriber.on_connect = on_connect
subscriber.on_message = on_message
subscriber.connect("localhost")
subscriber.loop_forever()
if __name__ == "__main__":
main()
Издатель (Publisher)
Назначение этого компонента публиковать сообщения. Сообщения можно передавать списком.
from paho.mqtt import publish
def main():
msgs = [{'topic': "mqtt/paho/test", 'payload': "hello"},
{'topic': "mqtt/paho/test", 'payload': "world"}]
publish.multiple(msgs, hostname="localhost")
if __name__ == "__main__":
main()
Примеры использования
Наиболее известные примеры использования: